这就是我要问的:
a="achoo"
b="bah"
c="clap"
d="dong"
e="eew"
vowels="$a $e"
consonants="$b $c $d"
echo $vowels输出achoo eew,但有时我想要$a $eecho $consonants输出bah clap dong,但有时我想要$b $c $d
当然,我可以只使用head或sed从脚本本身解析,但我不会。
vowels设置and时使用单引号避免变量扩展consonants:
vowels='$a $e'
consonants='$b $c $d'
否则你就不走运了;扩展发生在分配时,因此在分配后vowels不再consonants有任何对$a, $b, $c,$d或的引用$e。
你不能在脚本本身中做到这一点。vowels除了之外没有文字值achoo eew。该字符串在您分配它的那一刻已被插值,它是该行之后存在的唯一值。
如果这是您的来源,您可以通过 eval 使用间接并修改模式:
> a=123
> b='$a'
> echo $b
$a
> eval 'echo $b'
$a
> eval "echo $b"
123
但这会给你带来很多问题,以防万一有任何额外的引号$b
在它们周围使用单引号:
vowels='$a $e'
consonants='$b $c $d'