如何缩短 bash 中的变量名列表?

如何缩短 bash 中的变量名列表?

在 shell 脚本中,我有一个变量列表,我已将其排序为 $a、$b、$c 等。我想打印这些变量,而不必列出所有变量。我当前的代码如下:

a=1
b=2
c=3
d=4
e=5
f=6
g=7

for x in $a$b$c$d$e$f$g
do
  echo "$x"
done

我可以将 $a$b$c$d$e$f$g 缩短为引用 $a 到 $g 的内容吗?

答案1

使用“邪恶” eval

eval echo \"$(printf '$%s' {a..g})\"

请注意,我使用了转义引号,如果您的变量包含空格字符,则需要正确输出。


或者使用修正的 for 循环第一个答案

for x in {a..g}; do printf "${!x}"; done


或者在脚本中使用数组。这是一种不同的语法,但如果您需要一次获取所有值,则更容易处理。这是一个小例子:

array=(1 2 3 4 x 6)
array+=(7)  # add one more
array[4]=5  # modify element at index 4
printf '%s' "${array[@]}"

请注意,最后两个printf语句没有以换行符结束。

相关内容