2010-09-06 86 views

回答

4

变量var包含-e XYZ,如果您通过$的-e访问变量被解释为回声命令行选项。请注意,$ VAR的内容不会自动包含到“”中。

使用回声“$ VAR”来解决您的问题。

3

尝试:

echo "$VAR" 

代替。

-eecho的有效选项 - 这是导致此现象的原因)。

0

-e被bash解释为echo的参数。尝试

echo "$VAR" 
37

回答说,把$VAR放在引号只能通过副作用正确。也就是说,在加引号时,echo(1)收到一个参数-e xyz,并且由于这不是有效的选项字符串,因此只打印出echo。这是一个副作用,因为echo可以轻松打印有关格式错误的选项的错误。大多数程序会这样做,但似乎GNU echo(从coreutils)和bash内置的版本只是echo字符串,以连字符开头,但不是有效的参数字符串。这种行为没有记录,所以不应该依赖它。

此外,如果$VAR包含一个有效的echo选项参数,然后报价$ VAR不会帮助:

$ VAR="-e" 
$ echo "$VAR" 

$ 

大多数GNU计划采取--作为参数意味着没有更多的选项处理 - 所有参数--后将作为非选项参数进行处理。 bash echo不支持这个,所以你不能使用它。即使这样做,它也不会携带。 echo还有其他便携性问题(-n vs \c,否-e)。

正确和便携的解决方案是使用printf(1)

printf "%s\n" "$VAR" 
+0

大部分正确的答案。尽管POSIX标准清楚地表明“实现不应该支持任何选项”,但历史上实现的一部分确实支持选项(违反标准)。所以'printf'是正确的解决方案,'echo'实际上应该用于输出一些常量字符串,比如“Hello world”,你知道它不包含破折号或者反斜线。 – 2010-09-08 05:21:49

+0

很棒的回答。现在试图弄清楚这一点。谢谢。 – 2012-05-25 23:23:54

+0

如果你想使用'echo',你可以使用转义序列'echo -e'\ 055e''。 – dosentmatter 2018-02-15 19:34:07

相关问题