【问题标题】:if ["$i" -gt "$count"]; IS GIVING AN ERROR如果 ["$i" -gt "$count"];出现错误
【发布时间】:2014-02-22 12:25:30
【问题描述】:

我正在尝试将 'f-$count'(f-1,f-2) 名称放入数组中。

下面是代码,

echo "Enter the count"
read count
echo $count

#arr=()
i=1
while true;
do
 if ["$i" -gt "$count"]; then
  exit 0
 else
  arr[$i]=f-$i
  i=$((i+1))
 fi
done
echo ${arr[@]}

我收到的错误是 'script.sh: line 11: [3570: command not found ' 连续。

【问题讨论】:

  • 这在 BashPitfalls 页面中有介绍:mywiki.wooledge.org/BashPitfalls
  • 仅供参考,如果您使用 bash 或其他现代 ksh 衍生工具(显然是,因为您的代码使用数组),则此比较的现代/首选语法是 if (( i > count )); then。

标签: shell


【解决方案1】:

在 shell 编程中,if 中的括号必须用空格分隔:

if ["$i" -gt "$count"]; then

必须是:

if [ "$i" -gt "$count" ]; then

[EDIT] 左括号 ([) 实际上是一个内置的 shell 命令,因此与任何命令一样,需要在其后使用空格将其与其参数分隔开。

【讨论】:

  • 再次感谢 mbratch :)
  • 那是因为[实际上是一个命令,而不仅仅是语法,命令之间必须用空格隔开。
  • @glennjackman 感谢您的评论/澄清。我已经相应地更新了。
  • 仅供参考,[ 是任何现代 shell 上的内置命令——所以即使 /usr/bin/[ 存在,这并不是实际使用的,因此它的调用实际上并不涉及 fork/exec循环。运行type [查看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-20
  • 1970-01-01
  • 2014-04-05
  • 2015-09-15
  • 1970-01-01
  • 2012-09-07
相关资源
最近更新 更多