"[0: command not found" in Bash

12

我正在尝试在while循环中获取数组并需要更新数组中的值。

以下是我尝试过的代码。我遇到了这个错误 [0: command not found

#!/bin/bash
i=0
while [$i -le "{#myarray[@]}" ]
do 
    echo "Welcome $i times"
    i= $(($i+1)))
done

我该如何修复这个问题?


1
我发现Greg的维基非常有帮助,可以学习bash:http://mywiki.wooledge.org/BashGuide/TestsAndConditionals - kalaracey
1个回答

29
需要在赋值操作中[后面加上一个空格,=前后不要有空格。在$(($i+1)))中,会尝试执行((...))表达式的输出,我确定这不是你想要的。此外,在数组名之前缺少一个$

纠正这些问题后,您的while循环将如下所示:

#!/bin/bash
i=0
while [ "$i" -le "${#myarray[@]}" ]
do 
  echo "Welcome $i times"
  i=$((i + 1))
done
  • i=$((i + 1)) 可以写成 ((i++))
  • [ ... ] 中,将变量用双引号括起来总是更好的选择
  • 通过 shellcheck 检查您的脚本 - 您可以在那里捕获大多数基本问题

另请参阅:


2
非常好的回答,解决了一个有点棘手的问题(正如你所指出的那样,它足够广泛,可以分成多个重复问题)。 - Charles Duffy
1
这是唯一阻止我的启动脚本在我的.bashrc文件中工作的事情,谢谢! - Sam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接