16
A
回答
4
变量var包含-e XYZ,如果您通过$的-e访问变量被解释为回声命令行选项。请注意,$ VAR的内容不会自动包含到“”中。
使用回声“$ VAR”来解决您的问题。
3
尝试:
echo "$VAR"
代替。
(-e
是echo
的有效选项 - 这是导致此现象的原因)。
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"
相关问题
- 1. Bash字符串以数字开头的零个数
- 2. Concat以字符串开头
- 3. bash:写入以字符串开头的所有行
- 4. bash:获取以给定字符串开头的命令列表
- 5. bash:检查字符串是否以“/ *”开头
- 6. 检查字符串以数字开头
- 7. BASH函数内部回显字符串
- 8. 查找以字符串AS3开头的字符串
- 9. 过滤文本并返回以#开头的字符串?
- 10. 字符串以Google脚本开头
- 11. android json以字符串开头
- 12. RegEx匹配字符串开头的符号或字符串本身的开头
- 13. 如果字符串以子字符串开头,使用std :: equal
- 14. 检查字符串是否以字符串开头
- 15. KSH检查字符串是否以子字符串开头
- 16. 查找以 - 开头并以换行符结尾的字符串
- 17. 使用以数字开头的字符串来显示多个字符的子字符串
- 18. 匹配以特定字符开头的字符串
- 19. 检查字符串中以字符开头的单词@
- 20. preg_match字符串必须以字母字符开头
- 21. bash数组中的元素不以特定字符开头
- 22. Bash脚本:如何查找以一个字符开头的行?
- 23. 经典asp字符串只显示以某个字母开头的结果
- 24. regex as tokenizer - 以分隔符开头的字符串
- 25. 找到字符串开头的字符串数组内的PHP
- 26. 提取以数字开头和结尾的子字符串
- 27. NSArray indexOfObject未找到以数字开头的字符串
- 28. 是否允许字符串以Java中的数字开头
- 29. Linq to EF搜索不以字母开头的字符串
- 30. 从字符串中提取以字母开头的单词
大部分正确的答案。尽管POSIX标准清楚地表明“实现不应该支持任何选项”,但历史上实现的一部分确实支持选项(违反标准)。所以'printf'是正确的解决方案,'echo'实际上应该用于输出一些常量字符串,比如“Hello world”,你知道它不包含破折号或者反斜线。 – 2010-09-08 05:21:49
很棒的回答。现在试图弄清楚这一点。谢谢。 – 2012-05-25 23:23:54
如果你想使用'echo',你可以使用转义序列'echo -e'\ 055e''。 – dosentmatter 2018-02-15 19:34:07