Quiero introducir todas las entradas que coincidan con un patrón utilizando comodines. Ejemplo:
$ cat file_lister.sh
echo $1
$ ls *.txt
file1.txt
file2.txt
file3.txt
$ ./file_lister.sh ./*.txt
file1.txt
Pero esperaba que mi guión se imprimiera.
file1.txt
file2.txt
file3.txt
Respuesta1
Cuando ejecuta su script:
$ ./file_lister.sh ./*.txt
El shell se expande ./*.txt
a ./file1.txt ./file2.txt ./file3.txt
, por lo que después de la expansión realmente terminas ejecutando:
$ ./file_lister.sh ./file1.txt ./file2.txt ./file3.txt
Su script imprime el primer argumento:
echo $1
$1
corresponde al primer argumento pasado al script, que en este caso es ./file1.txt
: esperaría ver eso en lugar de solo file1.txt
(a menos que realmente hayas ejecutado ./file_lister.sh *.txt
).
Como otros han sugerido en los comentarios, si desea imprimirtodode los argumentos en lugar del primero, hay varias cosas que puedes hacer. Lo más fácil es cambiar $1
(el primer argumento) por $@
(todos los argumentos).
#!/bin/bash
printf '%s\n' "$@"
Veresta pregunta en Stack Overflowpara obtener más información sobre el procesamiento de argumentos en un script.