2014-04-03 28 views
0

請問有人能告訴我什麼是下面腳本中的連字符運算符?bash腳本連字符運算符和方括號

[ "${MYDATA_OPT-}" ] && set "$MYDATA_OPT" "[email protected]" 

data=${MYDATA_VER-1} 

是否有這些操作員的一些快速文檔?

我也想了解下面的腳本

shift $(($OPTIND -1)) 

while getopts vhx: c; do 
    case "$c" in 
      v) let data=data+1 ;; 
      h) usage ; exit 0 ;; 
      x) . $OPTARG ;; 
      \?) usage ; exit 2 ;; 
      *) usage ; exit 2 ;; 
    esac 
done 

非常感謝提前。

+2

提示 - 一旦你弄清楚了,在解釋它的代碼中註釋一下!總是想到你後面將要維護代碼的人。如果原作者已經這樣做了,它會節省你的時間,對吧? –

+1

同意..我試圖退休這個遺留代碼,並試圖編寫新的代碼。我將確保我添加註釋以幫助其他人:) – NewQueries

+1

這是POSIX shell的一個相當常規但不廣爲人知的特性。實際上,在註釋中記錄它與添加「#添加到變量」到像「i ++」這樣的行不同。我都是爲了評論棘手的邏輯修補程序,而不是語言語法。 – chepner

回答

2

形式下Paremeter展開

3.5.3殼牌參數擴展在bash手冊頁引用

$ {參數:-word}

如果參數設置或者爲空,詞的擴展被替換。 否則,參數值將被替換。

生產

${MY_DATA_VER:-1} 

將擴大到1如果MY_DATA_VER要麼未設置,或設置爲空字符串。你的榜樣,但是,忽略了冒號:

${MY_DATA_VER-1} 

這也記錄在手冊頁,雖然相當傾斜在一個句子中的特定運營商都記錄之前(從4.1手冊頁):

省略冒號只會導致對未設置參數的測試。

因此,在你的榜樣,擴大生產1如果MY_DATA_VER從未設置過,或任何價值MY_DATA_VER已經(可能是空字符串),如果它被設置。


shift例子簡單地移除第一$OPTIND-1殼參數。有關OPTIND的含義以及getopts如何工作的說明,請參閱bash手冊頁,或者在bash提示處嘗試help getopts

+0

非常感謝 – NewQueries