$ ./test.sh /mnt/*/
O glob aqui se expande para os nomes de diretório como argumentos separados, como se você os tivesse escrito manualmente na linha de comando:
$ ./test.sh /mnt/ext4/ /mnt/local/ /mnt/remote/ /mnt/test/
No entanto, no próprio script, você se refere apenas ao primeiro argumento, $1 :
dirs=$(ls -1d $1)
Se você quiser se referir a todos os argumentos, use "$@" (com as aspas).
No entanto, tudo o que você está fazendo com os nomes dos diretórios aqui é executar ls neles, que apenas exibe os mesmos nomes (embora em linhas separadas). Então, se você quer apenas a lista dos argumentos como uma string, você não precisa executar o comando ls , apenas atribua dirs="$@" .
No entanto, na maioria, se não em todos os casos, é melhor manter apenas a lista de nomes de arquivos nos parâmetros posicionais, e fazer um loop sobre eles com
for f in "$@"; do ...
ou
for f
do ...
Observe que os nomes de arquivos podem conter espaço em branco e, quando você concatena os nomes em uma única string, perde o significado do espaço em branco dentro dos nomes. foo bar doo pode ser três arquivos ou os dois arquivos foo bar e doo .