
Quando executo o seguinte comando
./command *
usando este script
#!/bin/bash
for f in ./$1
do
echo $f
done
apenas o primeiro arquivo especificado em $1 é ecoado. Minha pergunta é por quê?
Responder1
Porque você não usou aspas simples ou duplas ao executar seu comando:
./command '*'
ou:
./command "*"
Ou, se você quiser usar ./command *
, faça a seguinte modificação em seu script:
#!/bin/bash
for f in ./"$@"
do
echo $f
done
Isso porque $1
se refere ao primeiro argumento do seu comando e $@
se refere a todos os argumentos do seu comando.
Leia também alguma documentação nesse sentido:http://tldp.org/LDP/abs/html/internalvariables.html#APPREF
Responder2
O shell se expande *
quando você executa o comando. Portanto, executar o script é equivalente a
./command file1.txt file2.txt file3.txt
$1
corresponde ao primeiro argumento, portanto o loop possui apenas uma iteração.
Responder3
$1
refere-se apenas ao primeiro argumento. Você precisa usar $*
.
#!/bin/bash
for f in $*
do
echo $f
done