加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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 )

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读