2016-02-06 103 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