linux shell中 " " 与 ' ' 有什么区别?
创建文件
[root@master-1 ~]# cat path.service C:\\Program Files\\MyApp \ qwe \\ qq \\ az
需求:使用sed将 \\ 替换为 \
执行sed命令,并使用双引号" "
[root@master-1 ~]# sed -i "s/\\\\/\\/g" path.service sed:-e 表达式 #1,字符 8:未终止的“s”命令
执行sed命令,并使用双引号 ' '
[root@master-1 ~]# sed -i 's/\\\\/\\/g' path.service
为什么在上面的命令中,单引号执行成功了,而双引号则失败?
问题解析:
这个问题的核心在于 双引号 ("
) 和 单引号 ('
) 在 sed
和 shell 中的解析方式不同。
差异分析:
-
单引号 (
'
)- 单引号会将引号内的内容视为一个完整的字符串,原样传递给
sed
,不会对其中的字符进行额外的解释或转义。 - 示例
-
sed -i 's/\\\\/\\/g' path.service
传递给
sed
的字符串是:
-
- 单引号会将引号内的内容视为一个完整的字符串,原样传递给
双引号 ("
)
- 双引号会让 shell 先解析引号中的内容,然后再将解析后的结果传递给
sed
。 - 在你的命令中:
sed -i "s/\\\\/\\/g" path.service
shell 会对双反斜杠 \\
进行一次转义,结果是 s/\\/\/g
,传递给 sed
后不符合预期的替换格式,因此失败。
具体区别的行为:
- 单引号保留了
\\\\
和\\/
的原始形式,sed
能正确解析它们为匹配\\
并替换为\
。 - 双引号导致 shell 提前处理反斜杠,破坏了原本的
sed
替换规则。
越学越感到自己的无知
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现