如何获取变量变量的字面值?

时间:2013-08-01 17:28:11

标签: bash variables

以下是我的要求:

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

当然,我可以使用headsed来解析脚本本身,但我不会。

3 个答案:

答案 0 :(得分:3)

在设置vowelsconsonants时使用单引号来避免变量扩展:

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

否则你运气不好;扩展发生在分配时,vowelsconsonants不再引用$a$b$c$d ,或者$e在分配后再进行。

答案 1 :(得分:1)

你不能在脚本本身那样做。除vowels之外,achoo eew没有字面值。字符串在您指定字符串时已经插值,它是该行之后唯一存在的值。

如果这是您的来源,您可以通过eval使用间接并修改模式:

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

但如果$b

中有任何其他引号,那么会导致很多问题

答案 2 :(得分:1)

在它们周围使用单引号:

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