2014-03-19 26 views
1

我想在Bash中使用來自算術括號(())的一個表達式和來自測試[ ]的另一個表達式編寫複合表達式。這是我有:Bash複合表達式與算術和測試

if ((${#INPUT_FILES[@]} > 1)) -a [ -n "$OUTPUT_FILE" ]; then 

但是我得到的錯誤

./backup.sh: line 51: syntax error near unexpected token `-a' 
./backup.sh: line 51: `if ((${#INPUT_FILES[@]} > 1)) -a [ -n "$OUTPUT_FILE" ]; then' 

INPUT_FILES是一個字符串數組,OUTPUT_FILE是一個普通的字符串變量。

我怎麼邏輯and這兩個表達式在一起?

回答

3

-a標誌是test表達式語法本身的一部分。在括號外,你必須使用&&之類的。

if ((${#INPUT_FILES[@]} > 1)) && [ -n "$OUTPUT_FILE" ]; then 

如果你有你的心臟上使用-a設置,你可以寫這樣說:

if [ ${#INPUT_FILES[@]} -gt 1 -a -n "$OUTPUT_FILE" ]; then 

但阿德里安Frühwirth在他的評論中指出,-a-o標誌are obsolescent in XSI,所以你應該更喜歡&&||

+0

真棒,很好的答案。謝謝! –

+1

+1。在附註中,'-a' /'-o'事實上已被棄用,因可能的副作用而不應使用。 '&&'/'||'幾乎總是你想要的。 –

+0

@AdrianFrühwirth啊,謝謝,我沒有意識到。確認並更新。 – kojiro