$ OPTION="-n" $ echo $OPTION $
什么都没发生。我期待这一点。
$ OPTION="-n" $ echo $OPTION -n $
为什么会这样?
答案 0 :(得分:5)
-n
是echo的参数,这意味着尾部换行被抑制。 $ echo $OPTION
与以下$
之间没有空行的事实意味着$ OPTION已正确设置为-n
。
如果你在$ OPTION前放置了其他内容,那么echo将按照您的预期运行。 echo
仅将命令开头的单词解释为选项。一旦找到非选项字(在这种情况下为“OPTION”),后面的所有单词都会被视为文字,而不会被解析为echo
的选项。
$ echo OPTION is set to $OPTION
OPTION is set to -n
$
答案 1 :(得分:2)
请记住,shell在执行命令之前会扩展环境变量。因此:
option="-n"
echo $option
变为
echo -n ""
将$option
的值解释为echo
命令的参数。如果您使用Kornshell(与BASH 95%相似),您可以使用内置print
命令:
option="-n"
print -- "$option"
不幸的是,BASH没有print命令,并且在BASH echo命令中使用双短划线将打印出双短划线 - 而不是你想要的。
相反,你必须使用比printf
慢一点的echo
命令:
option="-n"
printf -- "$option\n" #Must include the \n to make a new line!
当然,如果你有这个,你就会遇到麻烦:
option="%d"
printf -- "$option\n"
解决这个问题:
option="%d"
printf "%s\n", "$option"
顺便说一句,你在测试中遇到了同样的问题:
option="-n"
if [ "$option" -eq "-n" ] #Won't work!
这就是为什么你会看到人们这样做的原因:
if [“x $ option”-eq“x-n”] #Will work
答案 2 :(得分:0)
要获得所需的结果,您可以这样做:
$ OUTPUT='-n'
$ echo -en ${OUTPUT}\\n