Bash: "invalid number" 将数组元素值传递给变量时出错

Bash: "invalid number" error when passing array elements value to variable

I 运行 GNU bash,版本 4.3.11(1)-release (x86_64-pc-linux-gnu)。从带有至少 3 个任意参数的 cmd 行调用的非常简单的脚本:

#!/bin/bash

n_arg=$#
arr=("$@") 
AA=${arr[0]}   # CHANGED FROM AA=S{arr[0]}
BB=${arr[1]}   # CHANGED FROM BB=S{arr[1]}

for (( i = 2; i < "$n_arg"; i++ )); do
    printf "%d   %s   %s   %s\n" $i $AA $BB  ${arr[i]}  # <- line 9
    # printf "%d   %s   %s   %s\n" $i "$AA" "$BB"  ${arr[i]}  # ALSO TRIED
done
exit 0

产生如下所示的错误:

$ script.sh 10 2 13 443
./script.sh: line 9: printf: S{arr[0]}: invalid number
./script.sh: line 9: printf: S{arr[1]}: invalid number
2    0   0   13
./script.sh: line 9: printf: S{arr[0]}: invalid number
./script.sh: line 9: printf: S{arr[1]}: invalid number
3    0   0   443

我可以看到分别传递给 AA 和 BB 的第一个和第二个数组元素的值似乎构成了一个我不太了解范围的 prbm。我确实尝试过: AA="S{arr[0]}" 当我在交互模式下输入代码时,一切都很顺利。

S 看起来像 $,尤其是当你累了的时候。我使用 font 设计来清楚地区分像这样的同形文字——强烈推荐。

数组不属于 POSIX shell standard. You can roll your own polyfill, or use a pre-fab one