如果我在 Bash 中输入以下命令:
echo "dog!!"
我不明白字符串dog!!
。相反,我得到了别的东西。
"dog!!"
我尝试通过 echoing来回显字符串"dog\!\!
,但它也不起作用。
当有两个感叹号时如何使用命令参数?
我希望这些感叹号被视为感叹号,没有任何特殊功能。
两个感叹号"!!"
似乎是最后一个命令。
答案1
您需要转义感叹号,或者使用单身的引号:
echo dog\!\!
echo 'dog!!'
(这并不能解释为什么你的echo "dog\!\!"
不起作用,但它应该起作用,我不知道为什么它不起作用。或者至少,它不应该作用于历史记录;在 Bash 中它将输出dog\!\!
。)
答案2
在 Bash 中,如果您希望感叹号始终被视为常规字符并且不需要历史扩展,您可以在当前 shell 中禁用它:
set +o histexpand
或者将命令添加到常用的配置文件,即最有可能.bashrc
对所有 shell 禁用它。
答案3
在Linux 薄荷 18.1基于 Ubuntu 16.04:
bash --version | head -1
GNU bash, version 4.3.46(1)-release (x86_64-pc-linux-gnu)
行为如下:
echo dog\!\!
结果是:
dog!!
echo 'dog!!'
结果是:
dog!!
echo "dog!!"
意外地打印出狗接下来是最后一个命令;例如,如果您ls
之前这样做过,它会打印:
echo "dogls" dogls
在GNU/Linux Debian 9 延伸有一个稍微新的版本:
bash --version | head -1
GNU bash, version 4.4.11(1)-release (x86_64-pc-linux-gnu)
行为如下:
echo dog\!\!
结果是:
dog!!
echo 'dog!!'
结果是:
dog!!
echo "dog!!"
意外地打印出狗接下来是最后一个命令;例如,如果您ls
之前这样做过,它会打印:
echo "dogls" dogls
这对我来说似乎是一致的。
在旧版本的旧系统上,它的行为可能bash
略有不同。但在新系统上,我们可以预料到这种行为。