如何在 shell 腳本中對多個事件使用通配符?

如何在 shell 腳本中對多個事件使用通配符?

我想使用通配符輸入與模式匹配的所有輸入。例子:

$ 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 上的這個問題有關處理腳本中的參數的詳細資訊。

相關內容