와일드카드를 사용하여 패턴과 일치하는 모든 입력을 입력하고 싶습니다. 예:
$ 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
그냥 대신에 이를 볼 것으로 예상됩니다 .file1.txt
./file_lister.sh *.txt
다른 사람들이 의견에서 제안한 것처럼 인쇄하려면모두첫 번째 인수 대신에 수행할 수 있는 작업이 많습니다. 가장 쉬운 방법은 $1
(첫 번째 인수)를 $@
(모든 인수)로 변경하는 것입니다.
#!/bin/bash
printf '%s\n' "$@"
보다스택 오버플로에 대한 이 질문스크립트에서 인수 처리에 대한 자세한 내용을 확인하세요.