我正在尝试在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
组合在一起?
答案 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,所以您应该更喜欢&&
和||
。