行为我在bash中不明白

时间:2013-12-24 19:07:02

标签: bash

我有一个包含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教程和手册,但我还没有得到它。

2 个答案:

答案 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$
相关问题