訪問引數

執行 Bash 指令碼時,傳遞給指令碼的引數根據其位置命名:$1 是第一個引數的名稱,$2 是第二個引數的名稱,依此類推。

缺少的引數只是求值為空字串。檢查引數是否存在可以按如下方式進行:

if [ -z "$1" ]; then
    echo "No argument supplied"
fi

獲取所有引數

$@$*是與所有指令碼引數互動的方式。引用 Bash 手冊頁 ,我們看到:

  • $*:從一個開始擴充套件到位置引數。當擴充套件在雙引號內發生時,它會擴充套件為單個單詞,每個引數的值由 IFS 特殊變數的第一個字元分隔。
  • $@:從一個開始擴充套件到位置引數。當擴充套件發生在雙引號內時,每個引數都會擴充套件為單獨的單詞。

獲取引數的數量

$# 獲取傳遞給指令碼的引數數量。一個典型的用例是檢查是否傳遞了適當數量的引數:

if [ $# -eq 0 ]; then
    echo "No arguments supplied"
fi

例 1

遍歷所有引數並檢查它們是否是檔案:

for item in "$@"
do  
    if [[ -f $item ]]; then
        echo "$item is a file"
    fi  
done

例 2

遍歷所有引數並檢查它們是否是檔案:

for (( i = 1; i <= $#; ++ i ))
do
    item=${@:$i:1}

    if [[ -f $item ]]; then
        echo "$item is a file"
    fi  
done