¿Cómo utilizar comodines para múltiples eventos en un script de shell?

¿Cómo utilizar comodines para múltiples eventos en un script de shell?

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 ./*.txta ./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

$1corresponde 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.

información relacionada