
Cuando ejecuto el siguiente comando
./command *
usando este script
#!/bin/bash
for f in ./$1
do
echo $f
done
sólo se repite el primer archivo especificado en $1. Mi pregunta es ¿por qué?
Respuesta1
Porque no usaste comillas simples o dobles cuando ejecutaste tu comando:
./command '*'
o:
./command "*"
O, si ciertamente desea utilizar ./command *
, realice la siguiente modificación en su secuencia de comandos:
#!/bin/bash
for f in ./"$@"
do
echo $f
done
Esto se debe a que $1
se refiere al primer argumento de su comando y $@
se refiere a todos los argumentos de su comando.
Lea también alguna documentación en este sentido:http://tldp.org/LDP/abs/html/internalvariables.html#APPREF
Respuesta2
El shell se expande *
cuando ejecuta el comando. Entonces, ejecutar el script es equivalente a
./command file1.txt file2.txt file3.txt
$1
corresponde al primer argumento, por lo tanto el bucle solo tiene una iteración.
Respuesta3
$1
Sólo se refiere al primer argumento. Necesitas usar $*
.
#!/bin/bash
for f in $*
do
echo $f
done