Dalam bash, bagaimana saya bisa menggemakan nama variabel, bukan nilai variabel? [Tutup]


18

Misalkan saya memiliki variabel vardalam bash. Saya dapat memberikan nilai untuk itu. Sebagai contoh, saya akan membuatnya menjadi string:

var="Test"

Saya ingin echonama 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 .


11
Err ... adil echo var?
Braiam

5
Saya tidak begitu mengerti maksud dari ini. Seperti yang ditunjukkan @Braiam, karena Anda mendefinisikan nama variabel di tempat pertama, Anda akan selalu mengetahuinya dan selalu dapat mencetaknya. Apa yang sebenarnya Anda coba lakukan?
terdon

3
Saya pikir Anda telah melewatkan arus solusi SO; cobavar=Test; Test=SO; echo ${!var}
iruvar

Saya juga tidak mengerti, tetapi itu yang ingin Anda lakukan? echo '$ var'
Renan Vicente

Saya benar-benar ingin tahu, tolong beri tahu kami untuk apa Anda membutuhkannya!
bubakazouba

Jawaban:


22

The ekspansi shell parameter $ {! Nama @} atau $ {! Nama *} bisa melakukan trik,

$ foo=bar
$ var_name=(${!foo@})
$ echo $var_name" = "$foo
foo = bar

Meskipun layak saya tidak dapat membayangkan utilitas ini ...


2
Perhatikan bahwa jika footidak ditentukan, tetapi foobarAnda akan mendapatkannya foobar. Alternatif lain: var_name=${-+foo}(atau ${foo+foo}) var_name=$'foo',, var_name=$"foo":-)
Stéphane Chazelas

1
Jika ada dua variabel yang terlihat, foo dan foobar, keduanya didefinisikan, ekspresi ${!foo@}akan dievaluasi foo foobar. Sebagaimana jawabannya, utilitasnya sulit dibayangkan.
CppNoob

30

Jika Anda hanya ingin menampilkan nama variabel statis, Anda dapat keluar dari $-sign:

echo \$var

3
Ini harus menjadi solusi yang diterima.
David Poxon

9
Tidak sama sekali !! Jawaban ini bukan solusi yang baik. Ini hanya akan menampilkan $var, tetapi tidak berguna jika nama variabelnya dinamis. Misalnya, Anda perlu memfilter sekumpulan variabel lingkungan dimulai dengan PREFIX_, tetapi Anda tidak tahu tentang ukuran set atau nama variabel di dalamnya. Solusi yang diterima lebih cocok untuk skenario ini.
Héctor Valverde Pareja

aka var_name = "$ (echo \ $ var)"
Yordan Georgiev
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.