在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

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

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

在 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

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

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

為什么會(huì)這樣?

回答
編輯回答
情皺

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

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

2017年2月22日 04:52