在Bash脚本中双重扩展参数

时间:2016-02-06 00:35:21

标签: bash

我想将参数展开两次,而${$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.inpinput2.inp

1 个答案:

答案 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