【问题标题】:Bash: "invalid number" error when passing array elements value to variableBash:将数组元素值传递给变量时出现“无效数字”错误
【发布时间】:2015-06-23 20:42:36
【问题描述】:

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

#!/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?你的意思是$?如,AA=${arr[0]}
  • 听起来你需要眼镜或更好的字体。 =)
  • ProggyFont 规则。

标签: arrays bash posix


【解决方案1】:

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

数组不是POSIX shell standard 的一部分。您可以滚动自己的 polyfill,或使用 pre-fab one

【讨论】:

  • 只是一个模糊的蹩脚和离题但真正简短的评论:....我接受了你的建议并下载/安装了 proggy TTF。在我的 1680x1050 显示器上的终端看起来真的很糟糕,因为由于屏幕分辨率高,我必须将字体大小从默认的 12 增加到 16 才能清楚地阅读......所以除非有一个解决方案可以在终端中清晰地缩放 TTF ,这对我来说是不行的。很遗憾,但非常感谢您的建议。
  • @Cbhihe 类似的情况,1920x1080 FHD,字体在高点尺寸下看起来参差不齐。不过,我开始认为这是一种好处。我不仅从 1993 年的 BBS 感觉(甚至陌生人评论)中获得了一点日常怀旧的感觉,而且我可以用我的无线键盘从远处清楚地阅读它。但我想这就像黄油里的蜗牛——一种后天习得的味道。也就是说,有一些非常好的抗锯齿等宽程序员字体。 Here's a great article listing 10 of them.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-15
  • 2014-12-10
  • 2013-04-20
  • 2014-06-07
  • 2018-11-13
  • 1970-01-01
相关资源
最近更新 更多