Como usar curinga para vários eventos em shell script?

Como usar curinga para vários eventos em shell script?

Quero alimentar todas as entradas que correspondam a um padrão usando curingas. Exemplo:

$ cat file_lister.sh
echo $1

$ ls *.txt
file1.txt
file2.txt
file3.txt

$ ./file_lister.sh ./*.txt
file1.txt

Mas eu esperava que meu script fosse impresso

file1.txt
file2.txt
file3.txt

Responder1

Quando você executa seu script:

$ ./file_lister.sh ./*.txt

O shell se expande ./*.txtpara ./file1.txt ./file2.txt ./file3.txt, então após a expansão você realmente acaba executando:

$ ./file_lister.sh ./file1.txt ./file2.txt ./file3.txt

Seu script imprime o primeiro argumento:

echo $1

$1corresponde ao primeiro argumento passado para o script, que neste caso é ./file1.txt- eu esperaria ver isso em vez de apenas file1.txt(a menos que você realmente tenha executado ./file_lister.sh *.txt).

Como outros sugeriram nos comentários, se você quiser imprimirtodosdos argumentos em vez do primeiro, há várias coisas que você pode fazer. O mais fácil é mudar $1(o primeiro argumento) para $@(todos os argumentos).

#!/bin/bash
printf '%s\n' "$@"

Veresta pergunta no Stack Overflowpara obter mais informações sobre o processamento de argumentos em um script.

informação relacionada