【问题标题】:How do I subtract 1 from an array item in BASH?如何从 BASH 中的数组项中减去 1?
【发布时间】: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


【解决方案1】:

最小的变化就是:

ARRAY[0]=$(( ${ARRAY[0]} - 1 ))

注意:

  • 在要分配给的变量名称前没有$foo=,不是$foo=
  • 作业中= 周围没有空格
  • $(( )) 是输入数学上下文(并扩展为该运算的结果)的语法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多