【问题标题】:simple shell script syntax error : [ : missing ']'简单的shell脚本语法错误:[:缺少']'
【发布时间】:2014-01-28 22:59:26
【问题描述】:

我正在尝试执行以下 c++ 脚本的 shell 等效项

int x=1;
int y=2;
int k=0;

for (int i=0;i<10;i++)
{
   for (int j=0;j<10;j++)
   {

       if ( (x==1) && (y==2) )
       {
           k=1;
       }

   }
 }

我总是遇到奇怪的语法错误,比如[ 或其他东西之间必须有空格,我相信这是其中一个原因

这就是我的示例代码的样子

    for x in ${title[@]} 
    do

    for y in ${author[@]} 
    do
        if [ [ $x == $1] && [ $y == $2] ]; # error : [: missing ']'
        then
            error=1
            return "$error"
        fi
    done
   done

我该如何解决

【问题讨论】:

  • ] 必须是一个单独的参数;它不是关键字。因此,至少您需要在 2 和 ] 之间留一个空格。然后给你一个无效的外部[ 命令;您需要使用[[]] 测试,或者您需要更仔细地重写[ ... ] 命令(可以说,作为[ 命令的两次调用)。
  • 如果您指定了您正在使用的 哪个 shell,将会有所帮助。

标签: c++ shell debugging ubuntu command


【解决方案1】:

if [ [ $x == $1] &amp;&amp; [ $y == $2] ]; 替换为if [[ $x == $1 &amp;&amp; $y == $2 ]];

【讨论】:

  • 我认为您必须使用 [ "$x" = "$1" ] &amp;&amp; [ "$y" = "$2" ][[ "$x" == "$1" &amp;&amp; "$y" == "$2" ]] ,其中第二个可能不需要引号(由于一些特殊的大小写规则,这只会​​让生活变得更加复杂)但是绝对强烈推荐在第一个。
  • @JonathanLeffler 我相信您的 2 个解决方案在逻辑上等同于我的解决方案 :) 使用引号更安全。
  • &amp;&amp; 不是经典 [ 命令的有效运算符(您使用 -a 表示 and-o 表示 or i>);在bash 中可能没问题,但文档没有这么说。请参阅 Bash 手册中的 Conditional ConstructsBourne shell builtins
  • @Lefebvre 您的解决方案不起作用 :( ,John 解决方案起作用 :)
  • @Computernerd 是的,我意识到:/ 我用正确的方式编辑了我的答案
猜你喜欢
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-10
  • 2010-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多