问题描述:
//新建一个.c文件 # touch hello.c
//用echo向hello.c写入内容
# echo "\"hello world!\"" >> hello.c
// 结果报错: bash: !\: event not found
分析原因:
输入:
# echo $-
得到:
himBHs
确认是由于 H - histexpand
模式打开了而导致。
命令行下,双引号里面用了 !
的话,Shell 会以为要执行历史展开,从而导致报错。
关于 himBH
,如果不知道啥意思的话,可以戳 《 Linux himBH 简析 》 了解。
解决方法:
1、关闭 histexpand
# set +H # echo $-
得到:
himBs
再次执行echo命令
# echo "\"hello world!\"" >> hello.c
结果成功
查看hello.c文件内容
# cat hello.c
输出:
"hello world!"
2、使用单引号
假设H - histexpand
模式仍处于打开状态,可以使用单引号代替双引号来解决这个问题
// 用echo向hello.c写入内容 # echo '"hello world!"' >> test.c // 查看hello.c文件内容
# cat hello.c
输出:
"hello world!"
我们注意到在单引号中,连双引号'“' 都不需要加转义符'\'了。
为什么双引号执行会出错,而单引号就不会呢 ?
关于 Linux 各种引号之间的使用区别,可戳 《 Linux 反引号、单引号、双引号简析 》 了解。
参考文章: