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。
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。