我认为这是一个相当简单的问题,但是,我无法完成这项工作:我有一个完整的变量列表,例如:
SP60=OLA SP61=BYE SP62=TRT
我想创建一个循环来在变量的特定编号中调用它们,所以我认为一个简短的解决方案可能是:
for i in {60..62}; do SP=$"SP$i"; echo $SP.txt; done
我原本期待的结果是:
OLA.txt BYE.txt TRT.txt
但我得到
SP60.txt...
我想知道是否有一种简单的方法可以完成这项工作。
答案1
考虑以下bash
/ksh
脚本:
SP60="OLA"
SP61="BYE"
SP62="TRT"
for (( i = 60; i <= 62; ++i )); do
typeset -n var="SP$i"
printf 'SP%d = %s.txt\n' "$i" "$var"
done
它将输出以下内容:
SP60 = OLA.txt
SP61 = BYE.txt
SP62 = TRT.txt
它使用名称引用变量var
(在and中使用declare -n
inbash
或 with进行声明)。这意味着每次取消引用它时,它都会扩展到它所引用的变量的值。typeset -n
bash
ksh
答案2
变量已经初始化后的另一个选择:
for i in $SP{60..62}; do echo $i.txt; done