Um script de shell é um programa executável. É por isso que type
diz que é um. Um shell script é tanto um comando executável quanto um script perl, um script python, um executável ELF nativo, um executável entre arquiteturas sendo executado pelo Qemu através do Linux binfmt_misc mecanismo, etc. Qualquer arquivo executável é um comando executável, não importa qual intérprete ele usa.
Como você pode ver na minha lista de exemplos, a linha entre "um script" e "não um script" é confusa: qualquer arquivo executável que comece com um shebang é um script, mas existem arquivos executáveis que não são código nativo nem scripts.
Quando você executa um programa, qual idioma está escrito é irrelevante. Portanto, não faria sentido que type
falasse sobre isso. O trabalho de type
é apenas dizer qual tipo de comando é do ponto de vista do shell.
Um script de shell não é a mesma coisa que uma função. Uma função é executada dentro do shell e pode modificar o ambiente do shell. Um script de shell é um programa separado; este programa separado pode ser escrito no mesmo idioma que o programa que você está executando agora, mas isso é apenas uma coincidência.