假设我有两个变量;
var_one_string=foo
var_two_string=bar
我如何完成这样的事情(伪代码示例);
示例 1
for i in one two; do
echo $var_${i}_string
done
# Desired output
foo
bar
示例 2
for i in one two; do
echo $var_$(echo ${i})_string
done
# Desired output
foo
bar
我知道这是不好的替换,我只是想知道是否有办法将字符串嵌套在另一个变量调用中?
编辑:我能够让它工作
var_one_string=foo
var_two_string=bar
for i in $(echo ${!var_*}); do
echo ${!i}
done
foo
bar
最佳答案
在 bash
中使用内置的 declare
以及间接变量扩展。首先将数组中动态性质的元素定义为
#!/bin/bash
list=(one two)
unset count
for var in "${list[@]}"; do
declare var_${var}_string="string"$((++count))
done
现在使用间接扩展访问创建的变量
for var in "${list[@]}"; do
dymv="var_${var}_string"
echo "${!dymv}"
done
并且永远不要使用eval
来满足此要求。可能很危险,因为有害命令不太可能进行代码注入(inject)。
关于bash - 在bash中,有没有办法在变量中替换或嵌套变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43918700/