Bash复合表达与算术和测试

时间:2014-03-19 00:31:13

标签: linux bash shell

我正在尝试在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组合在一起?

1 个答案:

答案 0 :(得分:3)

-a标志是test表达式语法本身的一部分。在括号外,您必须使用&&及其同类。

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

如果您已经开始使用-a,可以这样写:

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

但正如AdrianFrühwirth在评论中指出-a-o旗帜are obsolescent in XSI,所以您应该更喜欢&&||