bash-为什么变量开头的“ -e”无法通过echo获得输出?

时间:2019-02-25 23:48:00

标签: string bash set

在命令提示符($),我执行以下命令:

$ stupid="-a hello"
$ echo $stupid

回声产生:

-a hello

在命令提示符($),我执行以下命令:

$ stupid="-e hello"
$ echo $stupid

回声产生:

hello

“-e”为什么消失了?

1 个答案:

答案 0 :(得分:7)

由于$stupid未加引号,因此将其处理为echo的标志并启用反斜杠转义的解释。

如果您这样做:

$ stupid="-e hello"
$ echo "$stupid"

您会看到$stupid的值全部回显:

-e hello

因为变量扩展后的命令将是

echo "-e hello"

但是,在您的情况下,$stupid首先被扩展,然后以以下方式执行命令:

echo -e hello

如果您的变量值实际上包含转义字符,例如foo="-e \ttext",同时尝试echo $fooecho "$foo"并查看会发生什么,则可能会变得更加明显。

最重要的是:谨慎地将字符串和或双引号引起来。