Bagaimana cara mencetak nama variabel beserta nilainya?


Jawaban:


21

Secara sederhana:

j="jjj"
k="kkk"
l="lll"

for i in {j,k,l}; do echo "$i = ${!i}"; done

Hasil:

j = jjj
k = kkk
l = lll

  • ${!i}- ekspansi variabel bash / tipuan (mendapat nilai dari nama variabel yang dipegang oleh $i)

2
Anda dapat membuat {j,k,l}singkat dengan {j..l}juga
:)

@ αғsнιη, masuk akal untuk rentang yang diperluas, selama hanya ada 3 item - {j,k,l}cukup
RomanPerekhrest

1
j k lakan cukup.
Stéphane Chazelas

6

Jika Anda memiliki bash v4.4 atau yang lebih baru, Anda dapat menggunakan ${VAR@A}operator ekspansi Parameter.

Ini dibahas dalam manual Bash di bagian 3.5.3. Ekspansi Parameter Shell

Operator 'A'

Ekspansi adalah string dalam bentuk pernyataan penugasan atau menyatakan perintah yang, jika dievaluasi, akan menciptakan kembali parameter dengan atribut dan nilainya.

Maka dengan ini yang bisa Anda lakukan:

j="jjj"
k="kkk"
l="lll"

for i in {$j,$k,$l}; do 
    echo "${i@A}"
done

Dan hasil Anda seharusnya:

j='jjj'
k='kkk'
l='lll'

5

Atau sedang zshdigunakandeclare -p

% j=jjj; k=kkk; l=(l l l)               
% for v in j k l; do declare -p $v; done
typeset j=jjj
typeset k=kkk
typeset -a l=( l l l )
% 

3
bekerja dengan Bash juga
Steven Penny

2

Sementara ${!i}solusi yang lebih bersih dan lebih cepat, untuk kelengkapan, referensi tidak langsung juga dapat diperoleh dengan contoh berikut:

 foo=bar
 bar=baz
 $ echo $foo
 bar
 $ eval echo \$${foo}
 baz

Karena itu:

 j="jjj"
 k="kkk"
 l="lll"

 for i in {j,k,l}; do
   echo "$i = `eval echo \\$${i}`"
 done

Memberi:

 j = jjj
 k = kkk
 l = lll

Referensi:

Referensi Tidak Langsung

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.