2012-09-23 49 views
2

在一個bash腳本,我發現下一個建設:複雜的bash變量語法

if [[ "${xvar[id]:0:${#cnt}}" != "$cnt" ]]; then 

有人可以解釋上述條件做了什麼?

+0

bash手冊將有幫助 – kev

+0

當然。感謝您的幫助。 – kobame

+0

另一種幫助理解的方式是它的行爲與if [[$ {xvar [id]} = $ {cnt} *]]相同; then'。 OMG。 – chepner

回答

4

的複雜的表達式是:${xvar[id]:0:${#cnt}}

$xvar必須是一個數組,可能關聯。如果它是關聯的,則${xvar[id]}部分引用由字符串'id'標識的數組元素;如果不是,那麼它指的是變量$id索引的元素(允許您省略嵌套$),如註釋中的chepner所示。

表達式的${xxx:0:${#cnt}}一部分是指一個子串從偏移0到的可變$cnt長度(因此${#cnt}是字符串的可變$cnt長度)。

總而言之,則測試將檢查的${xvar[id]}第一字符是否相同的$cnt價值,所以是在$cnt${xvar[id]}的值的前綴的值。

+0

OMG。子串部分是有問題的部分。 Zilion thanx。 ;) – kobame

+0

'xvar'也可以是一個索引數組; 'id'可以是一個簡單的整數值參數。 – chepner

+0

@chepner:謝謝 - 我已經修改了相應的答案。 –