패턴과 일치하는 모든 입력에 와일드카드 입력을 사용하고 싶습니다. 예:
$ cat file_lister.sh
echo $1
$ ls *.txt
file1.txt
file2.txt
file3.txt
$ ./file_lister.sh ./*.txt
file1.txt
하지만 내 스크립트가 인쇄될 것으로 예상합니다.
file1.txt
file2.txt
file3.txt
답변1
스크립트를 실행할 때:
$ ./file_lister.sh ./*.txt
쉘은 ./*.txt
으로 확장되므로 ./file1.txt ./file2.txt ./file3.txt
확장 후 실제로 다음을 수행하게 됩니다.
$ ./file_lister.sh ./file1.txt ./file2.txt ./file3.txt
스크립트는 첫 번째 매개변수를 인쇄합니다.
echo $1
$1
스크립트에 전달된 첫 번째 인수에 해당합니다. 이 경우에는 ./file1.txt
- I'd like to see it 대신에 file1.txt
(실제로 실행하지 않는 한 ./file_lister.sh *.txt
)입니다.
다른 사람들이 의견에서 제안한 것처럼 인쇄하려면모두첫 번째 주장보다 더 많은 일을 할 수 있습니다. 가장 간단한 방법은 $1
(첫 번째 매개변수)를 $@
(모든 매개변수)로 변경하는 것입니다.
#!/bin/bash
printf '%s\n' "$@"
바라보다스택 오버플로에 대한 이 질문스크립트의 매개변수 처리에 대한 추가 정보