鍍金池/ 問答/Linux/ Shell for循環(huán)時,$1參數(shù)移位問題

Shell for循環(huán)時,$1參數(shù)移位問題

在 shell scripting cookbook中看到如下代碼

test.sh

#!/bin/bash

if [ $# -ne 3 ]; then
    echo "Usage: $0 URL -d DIRECTORY"
    exit -1
fi

for i in {1..4}; do
    case $1 in
      -d)
        shift
        directory=$1
        shift
        ;;
      *)
        url=${url:-$1}
        shift
        ;;
    esac
done

執(zhí)行腳本

# ./test.sh A -d B

此時 $1為A $2為-d $3為B
為什么在經(jīng)過了for語句后,case判斷的$1會匹配上-d,進(jìn)入了-d)的分支? 不應(yīng)該是A嗎?
似乎是$2參數(shù)在經(jīng)過for語句后移到了$1。

如果我將for in ... done 兩行注釋掉,則不會進(jìn)入case的-d分支。

為什么會這樣?

回答
編輯回答
情皺

因?yàn)槟阌昧?shift 啊

第一次循環(huán):沒有匹配到 -d,所以就匹配 * 了,而在里面有一個 shift,所以這時 $1 已經(jīng)變成 -d
第二次循環(huán):$1 已經(jīng)是 -d 了,所以就執(zhí)行了 -d 的邏輯咯

2017年2月22日 04:52