我正在尝试构建一个命令字符串,它基于将“-e”标志和另一个变量传入另一个基本脚本作为子例程调用并遇到一个奇怪的问题;当我将它传递给子程序时,我正在丢失字符串的“-e”部分。我创建了一个例子来说明这个问题,有什么帮助吗?
这可以按照您的预期运作:
$echo "-e $HOSTNAME"
-e ops-wfm
这不是;我们失去了“-e”,因为它被解释为一个特殊的限定符。
$myFlag="-e $HOSTNAME"; echo $myFlag
ops-wfm
添加“\”转义字符也不起作用,我得到前面带有“\”的正确字符串:
$myFlag="\-e $HOSTNAME"; echo $myFlag
\-e ops-wfm
如何防止吞下-e
?
答案 0 :(得分:5)
使用双引号:
$ myFlag="-e $HOSTNAME"; echo "${myFlag}"
-e myhost.local
我习惯使用${var}
而不是$var
,这意味着我可以在变量之后添加字符,而shell不会将它们解释为变量名称的一部分。
echo
可能不是最好的例子。大多数Unix命令都会接受--
to mark no more switches。
$ var='-e .bashrc' ; ls -l -- "${var}"
ls: -e .bashrc: No such file or directory
答案 1 :(得分:3)
好吧,你可以把你的变量放在引号中:
echo "$myFlag"
...使它等同于你的第一个例子,正如你所说,它可以正常工作。