我有以下变量:
display1 display2 display3 display4
我想将它们的内容打印在一行中。我使用以下命令,但我不明白为什么它不起作用:
for((i=1;i<=4;i++)); do printf '%s ' "$display$i"; done
答案1
$display
您的代码评估两个变量和的输出$i
。由于$display
可能未设置,因此您只会看到 的输出$i
。
假设您正在使用bash
,则可以使用形式为 的变量间接寻址${!varname}
。首先,创建包含所需变量名称的新变量,然后使用间接寻址
for((i=1;i<=4;i++)); do
varname=display$i
printf '%s ' "${!varname}"
done
或使用名称引用用 which 声明的变量declare -n
是对另一个变量的名称引用
for((i=1;i<=4;i++)); do
declare -n ref=display$i
printf '%s ' "$ref"
done