Як говорити в 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

із лише порожнім рядком між Привіт та Побачення , замість вар . Що я роблю неправильно?

Я запускаю bash 4.1.5 (1) на Ubuntu 10.04.4 .


11
Помилка ... просто echo var?
Брайам

5
Я не дуже розумію сенс цього. Як зазначає @Braiam, оскільки ви визначаєте найменування змінної в першу чергу, ви завжди будете її знати і завжди зможете її роздрукувати. Що ви насправді намагаєтесь зробити?
тердон

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

Я теж не розумію, але це те, що ти намагаєшся зробити? echo '$ 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, але марно, якщо ім'я змінної є динамічним. Наприклад, скажімо, вам потрібно відфільтрувати набір змінних середовища, починаючи з а PREFIX_, але ви не знаєте про розмір набору або назви змінних у ньому. Прийняте рішення більше підходить для цього сценарію.
Гектор Вальверде Пареджа

aka var_name = "$ (ехо \ $ вар)"
Йордан Георгієв,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.