VAR="-e xyz"
echo $VAR
出于某种原因,此命令将打印xyz
。我似乎找不到一种方法来获得以-e
开头的字符串。
这里发生什么事情?
发布于 2010-09-06 23:21:26
变量VAR
包含-e xyz
,如果通过$
访问该变量,-e
将被解释为echo
的命令行选项。请注意,$VAR
的内容不会自动包装到""
中。
使用echo "$VAR"
解决您的问题。
发布于 2010-09-07 16:36:16
说把$VAR
放在引号里的答案只会带来副作用。也就是说,当放在引号中时,echo(1)
接收-e xyz
的单个参数,因为这不是一个有效的选项字符串,所以echo
只打印出来。这是一个副作用,因为echo
可以很容易地打印出关于格式错误的选项的错误。大多数程序都会这样做,但似乎GNU echo
(来自coreutils
)和内置到bash
中的版本只是回显以连字符开头的字符串,但不是有效的参数字符串。此行为未记录在案,因此不应依赖它。
此外,如果$VAR
包含有效的echo
选项参数,则引用$VAR将无济于事:
$ VAR="-e"
$ echo "$VAR"
$
大多数GNU程序将--
作为参数,这意味着不再进行选项处理-- --
之后的所有参数都将作为非选项参数处理。bash echo
不支持此功能,因此您无法使用它。即使有,它也不会是可移植的。echo
还有其他的可移植性问题(-n
与\c
,没有-e
)。
正确且可移植的解决方案是使用printf(1)
。
printf "%s\n" "$VAR"
发布于 2010-09-06 23:19:03
尝试:
echo "$VAR"
而不是。
(对于echo
,-e
是一个有效的选项-这就是导致这种现象的原因)。
https://stackoverflow.com/questions/3652524
复制相似问题