"shell" é uma palavra genérica para bash , ksh , zsh e todos.
Para todos os shells, há uma página man (por exemplo, man bash ) que detalha como o comando é expandido antes da execução (variável $foo são substituídos por conteúdo, fu* em substituído por fun funny (desde esses arquivos exixts) e afins).
Você pode depurar comandos simples usando
echo my-command ${foo} fu*
Um comando mais complexo (por exemplo, com um pipe ( | )) pode ser depurado definindo set -x antes do comando.
set -x
my-command ${foo} fu* | while read x
do
done
set +x
No entanto, isso parece um problema XY .