2015-10-09 29 views
0

我發現this question如何在bash中進行條件賦值,但我想要做的是更復雜一點,而且我似乎無法獲得語法對。在我的情況下,條件是測試一個變量,看看它是否存在,並將輸出連接到一個字符串。Bash條件賦值,測試變量,同時構建字符串

這是我到目前爲止有:

fwversion="${BASH_REMATCH[1]}.$(([[ BASH_REMATCH[2] ]] ? BASH_REMATCH[2] : 0))" 

將會產生此錯誤消息:

bash: line 41: [[ BASH_REMATCH[2] ]] ? BASH_REMATCH[2] : 0 : syntax error: 
operand expected (error token is "[[ BASH_REMATCH[2] ]] ? BASH_REMATCH[2] : 0 ") 

這裏就是我想要達到的C++代碼:

std::string fwversion = BASH_REMATCH[1] + "." + ((BASH_REMATCH[2]) ? : BASH_REMATCH[2] : 0); 

什麼是正確的語法在bash中做到這一點?謝謝。

+0

這實際上是C++代碼 –

回答

1

看起來像[[ ... ]]在算術表達式中沒有理解。

我應該這樣做:

fwversion=${BASH_REMATCH[1]} 
[[ ${BASH_REMATCH[2]} ]] && fwversion+=${BASH_REMATCH[2]} || fwversion+=0 

[[ ${BASH_REMATCH[2]} ]] && ext=${BASH_REMATCH[2]} || ext=0 
fwversion="${BASH_REMATCH[1]}.$ext" 

關於第二個想法,我不會做,在所有的,我會使用shell的功率parameter expansion

str="foo:bar" 
if [[ $str =~ ^([a-z]+):([a-z]*)$ ]]; then 
    echo "${BASH_REMATCH[1]}.${BASH_REMATCH[2]:-0}" 
fi 
foo.bar 
str="foo:" 
if [[ $str =~ ^([a-z]+):([a-z]*)$ ]]; then 
    echo "${BASH_REMATCH[1]}.${BASH_REMATCH[2]:-0}" 
fi 
foo.0 
+0

嗯,有道理,雖然不是很可讀。老實說,我很想用if語句去做。 –

+0

哦!只是想到了一個更好的選擇。繼續編輯... –

+0

那麼看起來好多了。有沒有一個參考: - 構造? –