猛击"-e"益智游戏

che*_*utp 5 bash

我正在尝试构建一个命令字符串,基于将"-e"标志和另一个变量传入另一个作为子例程调用的基本脚本,并遇到一个奇怪的问题; 当我将它传递给子程序时,我正在丢失字符串的"-e"部分.我创建了一个例子来说明问题,任何帮助?

这可以按照您的预期工作:

$echo "-e  $HOSTNAME"

-e  ops-wfm
Run Code Online (Sandbox Code Playgroud)

这不; 我们失去了"-e"因为它被解释为一个特殊的限定符.

$myFlag="-e $HOSTNAME"; echo $myFlag

ops-wfm
Run Code Online (Sandbox Code Playgroud)

添加"\"转义字符也不起作用,我得到前面带有"\"的正确字符串:

$myFlag="\-e $HOSTNAME"; echo $myFlag

\-e ops-wfm
Run Code Online (Sandbox Code Playgroud)

我怎样才能防止-e被吞下?

Joh*_*web 5

使用双引号:

$ myFlag="-e $HOSTNAME"; echo "${myFlag}"
-e myhost.local
Run Code Online (Sandbox Code Playgroud)

我使用${var}而不是$var习惯,因为这意味着我可以在变量之后添加字符,而shell不会将它们解释为变量名称的一部分.

echo可能不是这里最好的例子.大多数Unix命令都会接受--标记不再有开关.

$ var='-e .bashrc' ; ls -l -- "${var}"
ls: -e .bashrc: No such file or directory
Run Code Online (Sandbox Code Playgroud)