我想使用通配符輸入與模式匹配的所有輸入。例子:
$ 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
shell 擴展./*.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' "$@"
看Stack Overflow 上的這個問題有關處理腳本中的參數的詳細資訊。