我有一个包含3个虚拟文件的文件夹:ab0,ab1和ab2。
$ echo ab*
ab0 ab1 ab2
$ myvariable=ab*
$ echo $myvariable
ab0 ab1 ab2
$ echo 'ab*'
ab*
到此为止,我想我明白了。但是:
$ myvariable='ab*'
$ echo $myvariable
ab0 ab1 ab2
我期待ab*
。这意味着有一个基本的我不明白。
我一直在搜索单引号和双引号,扩展以及更多的bash教程和手册,但我还没有得到它。
答案 0 :(得分:7)
正在解析行$ echo $myvariable
,首先将$myvariable
的内容替换为行,然后运行该行。因此,当行被bash解析时,它看起来像$ echo ab*
。
如果您$ echo "$myvariable"
,您将获得所需的行为。
答案 1 :(得分:2)
BASH在分配期间没有执行扩展,在运行echo
命令时它会扩展。因此,对于这两种引号,您将原始字符串ab*
存储到您的变量中。要查看此行为,请在echo
时使用引号:
hephaestus:foo james$ echo ab*
ab0 ab1 ab2
hephaestus:foo james$ var=ab*
hephaestus:foo james$ echo $var
ab0 ab1 ab2
hephaestus:foo james$ echo "$var"
ab*
hephaestus:foo james$ var='ab*'
hephaestus:foo james$ echo $var
ab0 ab1 ab2
hephaestus:foo james$ echo "$var"
ab*
hephaestus:foo james$