terminal - 我该如何逃脱!所以终端会看到 echo "Hello World!" 的结束 dquote
问题描述
问题:
通过echo "Hello World!"
在终端中输入 , ,我得到的回答是:dquote>
问题(2部分):
如果我使用单引号,终端会返回我期望看到的结果:Hello World!
- 你如何逃脱
!
? - 为什么这里的双引号与单引号不同?
我努力了:
使用反斜杠,echo "Hello World/!"
似乎不起作用,我仍然返回dquote>
。我还尝试寻找有关转义字符和 stackoverflow 答案的其他答案。他们通常最终会超过我的头。
解决方案
关于问题1:(你如何逃避!
?)
您可以使用"'!'"
例子:
echo "Hello World"'!'""'!'" I'm there."
结果:
Hello World!! I'm there.
关于问题2:(为什么这里的双引号和单引号不同?)
因为!
是默认的“历史扩展”字符并且在双引号内执行“历史扩展”。
巴什手册:
将字符括在单引号 (
'
) 中会保留引号内每个字符的文字值。单引号之间不能出现单引号,即使前面有反斜杠。将字符括在双引号 (
"
) 中会保留引号内所有字符的文字值,但$
,`
,\
, 和启用历史扩展时除外!
。字符$
并`
在双引号内保留其特殊含义(请参阅Shell Expansions)。反斜杠仅在后跟以下字符之一时才保留其特殊含义:$
、`
、"
、\
或换行符。在双引号内,删除后面跟有这些字符之一的反斜杠。没有特殊含义的字符前面的反斜杠保持不变。双引号可以用反斜杠在双引号中引用。如果启用,!
除非使用反斜杠对出现在双引号中的字符进行转义,否则将执行历史扩展。前面的反斜杠!
不会被删除。双引号中的特殊参数
*
和@
具有特殊含义(请参阅Shell 参数扩展)。
推荐阅读
- java - spring boot服务启动时,向mongodb插入数据
- reactjs - 简单的 React 组件问题
- javascript - 在 HTML5 视频中突出显示播放器搜索栏
- javascript - 如何使用for循环使用拉斐尔图形绘制由小到大的矩形塔?
- python - 如何从python中的两个不同文件中删除重复的文本
- r - R - 矩阵的列数必须在 rbind 中匹配
- php - 如何在当前站点上显示 PHP 回显 HTML 内容?
- javascript - .AddEventListner 不是函数
- sql - BigQuery:按类似字符串对大型数据集进行分组
- r - 在 R 中存在重复项的情况下查找两列中的值(已编辑)