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.

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.