В bash, как я могу отобразить имя переменной, а не ее значение? [закрыто]


18

Предположим, что у меня есть переменная varв Bash. Я могу присвоить ему значение. Например, я сделаю это строкой:

var="Test"

Я хочу echoимя var, а не ценность, которой владеет var. (Я могу сделать последнее с echo $var, но я действительно хочу сделать первое.)

Ответ на этот вопрос от SO говорит, чтобы использовать echo ${!var}, но когда я делаю это, я эхо просто возвращает пустую строку. Например, этот скрипт bash

#!/bin/bash

echo "Hi"
var="Test"
echo ${!var}
echo "Bye"

возвращает этот вывод:

Hi

Bye

с пустой строкой между Привет и Bye вместо var . Что я делаю неправильно?

Я использую bash 4.1.5 (1) в Ubuntu 10.04.4 .


11
Эээ ... просто echo var?
Брайам

5
Я не очень понимаю смысл этого. Как указывает @Braiam, поскольку вы определяете имя переменной в первую очередь, вы всегда будете знать это и всегда сможете напечатать его. Что ты на самом деле пытаешься сделать?
Тердон

3
Я думаю, что вы пропустили дрейф SO решения; попробуйvar=Test; Test=SO; echo ${!var}
ирувар

Я тоже не понимаю, но это то, что вы пытаетесь сделать? эхо '$ var'
Ренан Висенте

Мне очень любопытно, расскажите, пожалуйста, для чего вам это нужно!
bubakazouba

Ответы:


22

Расширение параметров оболочки $ {! Name @} или $ {! Name *} может помочь,

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

Хотя это возможно, я не могу представить себе полезность этого ...


2
Обратите внимание, что если fooне определено, но foobarесть, вы получите foobar. Другие варианты: var_name=${-+foo}(или ${foo+foo}), var_name=$'foo', var_name=$"foo":-)
Stéphane Chazelas

1
Если бы были видны две переменные, foo и foobar, обе определены, выражение получило ${!foo@}бы значение foo foobar. Как отмечается в ответе, его полезность трудно представить.
CppNoob

30

Если вы хотите просто вывести имя статической переменной, вы можете экранировать $-sign:

echo \$var

3
Это должно быть принятым решением.
Дэвид Поксон

9
Не на всех !! Этот ответ не является хорошим решением. Это будет просто вывод $var, но бесполезно, если имя переменной является динамическим. Например, скажем, вам нужно отфильтровать набор переменных среды, начиная с a PREFIX_, но вы не знаете о размере набора или именах переменных в нем. Принятое решение больше подходит для этого сценария.
Гектор Вальверде Пареджа

aka var_name = "$ (echo \ $ var)"
Йордан Георгиев,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.