【发布时间】:2017-10-14 21:55:00
【问题描述】:
为了好玩,我在 BASH 中有一个副项目,我有这个代码 sn-p(ARRAY[0] 是 8):
while [ $ALIVE == true ]; do
$ARRAY[0] = ${ARRAY[0]} - 1
echo ${ARRAY[0]}
done
但是,它返回了这个错误:
line 16: 8[1]: command not found
我刚开始在 BASH 中工作,所以我可能会犯一个明显的错误,但我已经搜索并搜索了此类问题的答案,但没有找到任何结果。
【问题讨论】:
-
你不能在 bash 的 any 赋值中的
=周围有空格。这根本不是特定于数组的。 -
顺便说一句,shellcheck.net 将为您找到此错误和其他错误。
-
...和良好实践说明一样——全大写变量名用于对 OS 或 shell 有意义的变量,而具有至少一个小写字符的名称由应用程序使用的 POSIX 规范。见pubs.opengroup.org/onlinepubs/9699919799/basedefs/…,第四段。
-
(并且
==不是[ ]中的标准字符串比较运算符——这只是一个=。Bash 支持==作为扩展,但这会咬你当有人尝试在使用 ash 或 dash 的平台上使用/bin/sh运行您的代码时;请参阅 pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html。引用以避免错误并更改变量名称,这将使第一行成为while [ "$alive" = true ])。
标签: bash