bash – 为什么测试表示意外的括号?
发布时间:2020-12-15 22:20:14 所属栏目:安全 来源:网络整理
导读:我的 shell脚本中有一个if行,如下所示: if [ 0 -lt 2 -o (0 -gt 3 ) ] 这给出了错误: line 3: syntax error near unexpected token `(' 所以我看了man test以确保支持parens,当然,非常靠近手册页的顶部,它们是!是什么赋予了!? 上面的示例与代码不完全匹
我的
shell脚本中有一个if行,如下所示:
if [ 0 -lt 2 -o (0 -gt 3 ) ] 这给出了错误: line 3: syntax error near unexpected token `(' 所以我看了man test以确保支持parens,当然,非常靠近手册页的顶部,它们是!是什么赋予了!? 上面的示例与代码不完全匹配,因为我试图清理它以证明一个点,但如果你需要上下文,这是my repo. 编辑:更改了if行以匹配错误. 解决方法
括号作为参数传递给测试命令. […]表达式只是键入测试命令的另一种方式.唯一的区别是[命令的最后一个参数必须是].
因此,您应该像传递给命令的任何其他参数一样转义括号以避免shell解释: if [ ( $# -lt 2 ) -o ( $# -gt 3 ) ] 或者,使用单引号: if [ '(' $# -lt 2 ')' -o '(' $# -gt 3 ')' ] 从信息页面: `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. 顺便说一下,表达式可以改写如下: if builtin test ( $# -lt 2 ) -o ( $# -gt 3 ) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |