首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Bash:以"-“开头的回显字符串

Bash:以"-“开头的回显字符串
EN

Stack Overflow用户
提问于 2010-09-06 23:15:23
回答 4查看 10.7K关注 0票数 32
代码语言:javascript
复制
VAR="-e xyz"
echo $VAR

出于某种原因,此命令将打印xyz。我似乎找不到一种方法来获得以-e开头的字符串。

这里发生什么事情?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-09-06 23:21:26

变量VAR包含-e xyz,如果通过$访问该变量,-e将被解释为echo的命令行选项。请注意,$VAR的内容不会自动包装到""中。

使用echo "$VAR"解决您的问题。

票数 4
EN

Stack Overflow用户

发布于 2010-09-07 16:36:16

说把$VAR放在引号里的答案只会带来副作用。也就是说,当放在引号中时,echo(1)接收-e xyz的单个参数,因为这不是一个有效的选项字符串,所以echo只打印出来。这是一个副作用,因为echo可以很容易地打印出关于格式错误的选项的错误。大多数程序都会这样做,但似乎GNU echo (来自coreutils)和内置到bash中的版本只是回显以连字符开头的字符串,但不是有效的参数字符串。此行为未记录在案,因此不应依赖它。

此外,如果$VAR包含有效的echo选项参数,则引用$VAR将无济于事:

代码语言:javascript
复制
$ VAR="-e"
$ echo "$VAR"

$

大多数GNU程序将--作为参数,这意味着不再进行选项处理-- --之后的所有参数都将作为非选项参数处理。bash echo不支持此功能,因此您无法使用它。即使有,它也不会是可移植的。echo还有其他的可移植性问题(-n\c,没有-e)。

正确且可移植的解决方案是使用printf(1)

代码语言:javascript
复制
printf "%s\n" "$VAR"
票数 56
EN

Stack Overflow用户

发布于 2010-09-06 23:19:03

尝试:

代码语言:javascript
复制
echo "$VAR"

而不是。

(对于echo-e是一个有效的选项-这就是导致这种现象的原因)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3652524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档