2016-02-06 110 views
0

我想扩展一个参数两次,而${$PARAM}不起作用。在Bash脚本中双参数扩展

例如,如果设置了两个变量为文件名,然后希望通过这些变量循环,并扩大到它们的文件名:

​​

我怎样才能到从这些参数访问的文件名for循环?

即,扩大到input1.inpinput2.inp

+1

如果您使用单个阵列,这会更容易。 'infp =(input1.inp input2.inp)' –

+1

不过,您要做的事情叫做间接扩展。我们已经有覆盖它的问题和答案。 –

回答

2

你已经差不多:只需使用"${!input_param}"而不是${$input_param}

在这种情况下,引用不起作用,但这是一个好习惯。

双引号–扩展到每个变量名不同的字之间使用时要注意的差异来${[email protected]},这–,而"${!INPF_*}"没有。你几乎总是想要"${[email protected]}"。看到区别:

$ for var in "${!INPF_*}"; do echo "$var"; done 
INPF_1 INPF_2 
$ for var in "${[email protected]}"; do echo "$var"; done 
INPF_1 
INPF_2 

查看manual的各种参数展开。

+0

虽然这并没有让我获得文件名。我已经更新,以更清晰。 – salotz

+0

@salotz啊,我明白了。更新。 –

+0

我其实走得这么远,但我没有意识到* vs @的差异。重复的答案给出了其余部分,或者像@Charles Duffy说的那样使用一个像普通编程语言那样的数组。 – salotz