No bash, algumas variáveis são reservadas, como $ 0, que fornece o nome do comando - nesta instância, é o nome do script (portanto, ./shell.txt). Outro exemplo é $$, que dará o ID do processo. Eu acredito que $ FUNCNAME deve imprimir o nome da função que está sendo usada.
Qualquer variável no formato $ 1 $ 2 $ 3 etc será qualquer parâmetro posicional que você tenha passado para ela.
Se você remover a variável $ 0 e substituí-la por $ FUNCNAME, obterá a saída que está procurando.
Aqui está um pequeno script, vamos salvá-lo como passingVariables.sh (usamos o .sh para mostrar que é um shell script - puramente superficial, mas ajuda a manter as coisas claras):
#!/bin/bash
echo "The first word is $1 and the second word is $2"
Agora, se eu o fiz assim:
./passingVariables.sh apple orange
Ele cuspiu o seguinte:
"The first word is apple and the second word is orange"