我想将参数展开两次,而${$PARAM}
不起作用。
例如,如果我将两个变量设置为文件名,然后想要遍历这些变量并扩展到它们的文件名:
INPF_1=input1.inp
INPF_2=input2.inp
# copy the input files to the execution directory
for input_param in ${!INPF_*}; do
echo ${$input_param}
done
如何从for循环中的那些参数访问文件名?
即,展开到input1.inp
和input2.inp
。
答案 0 :(得分:2)
你差不多了:只使用"${!input_param}"
代替${$input_param}
。
在这种情况下引用并没有做任何事情,但这是一个好习惯。
请注意与${!INPF_@}
的区别,当在双引号之间使用时,它会扩展为每个变量名称的单独一个单词,而"${!INPF_*}"
则不会。你几乎总是想要"${!INPF_@}"
。看到差异:
$ for var in "${!INPF_*}"; do echo "$var"; done
INPF_1 INPF_2
$ for var in "${!INPF_@}"; do echo "$var"; done
INPF_1
INPF_2
有关各种参数扩展,请参阅manual。