Linux Bash复合表达式及其算法和测试
我试图在Bash中编写一个复合表达式,它使用算术括号Linux Bash复合表达式及其算法和测试,linux,bash,shell,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[@]} >
(())
中的一个表达式和测试[]
中的另一个表达式。这就是我所拥有的:
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\u FILES
是字符串数组,OUTPUT\u FILE
是常规字符串变量
如何在逻辑上将
和这两个表达式结合在一起?-a
标志是测试表达式语法本身的一部分。在括号外,您必须使用&&
及其类似内容
if (( ${#INPUT_FILES[@]} > 1 )) && [ -n "$OUTPUT_FILE" ]; then
如果你一心想使用-a
,你可以这样写:
if [ ${#INPUT_FILES[@]} -gt 1 -a -n "$OUTPUT_FILE" ]; then
但正如Adrian Frühwirth在他的评论中指出的那样,-a
和-o
标志,因此您应该更喜欢&
和|
+1。另一方面,-a
/-o
实际上已被弃用,由于可能存在副作用,因此不应使用<代码>&&
/|
几乎总是你想要的。@AdrianFrühwirth啊,谢谢,我没意识到。确认并更新。@AdrianFrühwirth感谢,kojiro感谢链接。这本书读得很好。对于未来的旅行者,向下滚动大约一半到“应用程序使用”部分