我的if
shell脚本中有一行如下所示:
if [ 0 -lt 2 -o (0 -gt 3 ) ]
Run Code Online (Sandbox Code Playgroud)
这给出了错误:
line 3: syntax error near unexpected token `('
Run Code Online (Sandbox Code Playgroud)
所以我看着man test
确保parens得到支持,果然,非常靠近手册页的顶部,它们是!是什么赋予了!?
上面的例子并不完全匹配代码,因为我试图清理它以证明一个观点,但如果您需要上下文,这是我的回购.
编辑:更改了if行以匹配错误.
括号作为参数传递给test
命令.的表达式仅仅是另一种方式来键入命令.唯一的区别是命令的最后一个参数必须是.[ ... ]
test
[
]
因此,您应该像传递给命令的任何其他参数一样转义括号以避免shell解释:
if [ \( $# -lt 2 \) -o \( $# -gt 3 \) ]
Run Code Online (Sandbox Code Playgroud)
或者,使用单引号:
if [ '(' $# -lt 2 ')' -o '(' $# -gt 3 ')' ]
Run Code Online (Sandbox Code Playgroud)
从信息页面:
`test'
`['
test EXPR
Evaluate a conditional express ion EXPR and return a status of 0
(true) or 1 (false). Each operator and operand must be a separate
argument.
Run Code Online (Sandbox Code Playgroud)
顺便说一下,表达式可以改写如下:
if builtin test \( $# -lt 2 \) -o \( $# -gt 3 \)
Run Code Online (Sandbox Code Playgroud)