Misalkan saya memiliki variabel var
dalam bash. Saya dapat memberikan nilai untuk itu. Sebagai contoh, saya akan membuatnya menjadi string:
var="Test"
Saya ingin echo
nama var
, bukan nilai yang dipegang oleh var
. (Saya dapat melakukan yang terakhir dengan echo $var
, tetapi saya sebenarnya ingin melakukan yang pertama.)
Jawaban untuk pertanyaan ini dari SO mengatakan untuk digunakan echo ${!var}
, tetapi ketika saya melakukan itu saya gema hanya mengembalikan baris kosong. Misalnya, skrip bash ini
#!/bin/bash
echo "Hi"
var="Test"
echo ${!var}
echo "Bye"
mengembalikan hasil ini:
Hi
Bye
hanya dengan garis kosong antara Hi dan Bye , bukan var . Apa yang saya lakukan salah?
Saya menjalankan bash 4.1.5 (1) di Ubuntu 10.04.4 .
echo var
?var=Test; Test=SO; echo ${!var}
Jawaban:
The ekspansi shell parameter $ {! Nama @} atau $ {! Nama *} bisa melakukan trik,
Meskipun layak saya tidak dapat membayangkan utilitas ini ...
sumber
foo
tidak ditentukan, tetapifoobar
Anda akan mendapatkannyafoobar
. Alternatif lain:var_name=${-+foo}
(atau${foo+foo}
)var_name=$'foo'
,,var_name=$"foo"
:-)${!foo@}
akan dievaluasifoo foobar
. Sebagaimana jawabannya, utilitasnya sulit dibayangkan.Jika Anda hanya ingin menampilkan nama variabel statis, Anda dapat keluar dari
$
-sign:sumber
$var
, tetapi tidak berguna jika nama variabelnya dinamis. Misalnya, Anda perlu memfilter sekumpulan variabel lingkungan dimulai denganPREFIX_
, tetapi Anda tidak tahu tentang ukuran set atau nama variabel di dalamnya. Solusi yang diterima lebih cocok untuk skenario ini.