2013-08-01 2 views
0

Вот что я спрашиваю:Как получить буквальное значение переменной переменной?

a="achoo" 
b="bah" 
c="clap" 
d="dong" 
e="eew" 

vowels="$a $e" 
consonants="$b $c $d" 
  • echo $vowels выходы achoo eew, но иногда я хочу $a $e
  • echo $consonants выходы bah clap dong, но иногда я хочу $b $c $d

Конечно, я мог бы просто используйте head или sed, чтобы разобрать сам скрипт, но я не буду.

ответ

3

Используйте одинарные кавычки, чтобы избежать расширения переменных при установке vowels и consonants:

vowels='$a $e' 
consonants='$b $c $d' 

Вы не повезло в противном случае; расширение произошло во время назначения, поэтому vowels и consonants больше не имеют ссылок на $a, $b, $c, $d, или $e, после того как они назначены.

1

Вы не можете сделать это в самом скрипте. Литературного значения vowels нет, кроме achoo eew. Строка была интерполирована в тот момент, когда вы ее назначили, и это единственное значение, которое существует после этой строки.

Если это ваш источник, вы можете использовать окольные через Eval и изменить шаблон:

> a=123 
> b='$a' 
> echo $b 
$a 
> eval 'echo $b' 
$a 
> eval "echo $b" 
123 

Но это вызовет у вас много проблем в случае, если есть какие-либо дополнительные кавычки в $b

1

Используйте одинарные кавычки, вокруг них:

vowels='$a $e' 
consonants='$b $c $d' 
Смежные вопросы