在 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
语句没有以换行符结束。