-bash: !": event not found

背景

某些场景需要用到sed进行一些替换 结果在

sed -i "s/HIGH:!aNULL:!MD5/ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS/g"  `grep 'HIGH:!aNULL:!MD5'  -rl ./*-trial*`;

报错如下

-bash: !aNULL: event not found

分析

所输入的命令中间包含 !,叹号,不能组成命令。

其实!会解释成历史消息

因为 !" 会被当作命令行历史替换的符号来处理。不过在shell脚本中没有这样的问题。

不幸的是,你无法使用转义符来转义!:

$ echo "hi\!"hi\!

解决方案之一,使用单引号,即

$ echo 'Hello, world!'

如果你必须使用双引号,可以试试通过 set +H 来取消命令行历史替换。

set +Hecho "Hello, world!"

解决

使用单引号~~

猜你喜欢

转载自my.oschina.net/qixiaobo025/blog/1806246
今日推荐