Secara tidak langsung memperluas variabel dalam shell

9

Saya perlu referensi variabel secara tidak langsung dalam bashshell.

Saya pada dasarnya ingin apa yang dapat Anda lakukan makedengan menulis $($(var)).

Saya telah mencoba menggunakan ${$var}solusi mana yang akan menjadi yang paling lurus ke depan bashtetapi kemudian saya mendapatkan kesalahan ini:

bash: ${$var}: bad substitution

Apakah ada cara untuk melakukan ini?

Apa yang saya coba lakukan adalah untuk iterate atas semua argumen ( $1, $2, $3, ...) untuk program menggunakan variabel iterasi dan saya tidak bisa melakukan ini tanpa tipuan.

wefwefa3
sumber

Jawaban:

13

Jika sudah var1=foodan foo=bar, Anda bisa mendapatkannya bardengan mengatakan ${!var1}. Namun, jika Anda ingin beralih pada parameter posisi, hampir pasti lebih baik dilakukan

for i in "$@"; do
    # something
done
Tom Hunt
sumber
Apakah ada cara untuk menambahkan beberapa tingkat tipuan?
wefwefa3
1
Bukannya aku bisa cepat menemukannya. Tebakan jelas ${!!var1}tidak berhasil. Namun, Anda selalu dapat melakukannya secara manual, mis tmp=${!var1}; echo ${!tmp}.
Tom Hunt
3

Menggunakan /bin/bash:

foo=bar
test=foo
echo ${!test}

# prints -> bar
Nick Grealy
sumber