$ ./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
.