You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell脚本如何在引号中展开变量?

如何让包含引号的复杂命令正常运行?

嘿,我完全懂你在编写带引号的复杂命令时那种抓耳挠腮的感觉——引号嵌套、冲突分分钟就让命令报错!结合常见的Unix-like shell场景,我给你整理了几个实用的解决办法:

1. 转义特殊引号(基础操作)

如果需要在同类型引号内部使用相同的引号,直接用反斜杠\转义就行,但要注意单引号的特殊情况:

  • 双引号内转义双引号:
    echo "He shouted: \"This command works!\""
    
  • 单引号内转义单引号(bash里单引号内的反斜杠会被当作普通字符,所以得用'\''的拼接技巧:先闭合单引号,加转义的单引号,再重新打开单引号):
    echo 'He whispered: '\''I got it now!'\'''
    

2. 混合使用单双引号(灵活省心)

单引号和双引号的特性刚好互补:单引号会完全“原样保留”内部所有字符(包括变量、特殊符号),双引号会解析变量但忽略大部分特殊字符。所以可以根据需求混搭:
比如要在命令里同时用变量和引号:

echo "My current user is $USER, and I said: 'I love writing complex commands!'"

这里双引号包裹整体,内部的单引号不需要转义,直接就能正常执行和显示。

3. Here文档(对付超复杂场景)

如果你的命令有多行内容、多层引号嵌套,Here文档绝对是救星。它能让你原封不动地传递文本,完全不用纠结转义:

# 比如给cat命令传递带多种引号的多行内容
cat << END_OF_TEXT
She said: "Don't worry, this will work!"
I answered: 'Yeah, Here docs are awesome!'
END_OF_TEXT

这里END_OF_TEXT是你自定义的分界符,只要和内容里的字符串不重复就行,分界符之间的内容会原封不动输出。

4. ANSI-C引号(bash/zsh专属技巧)

如果你用的是bash或者zsh,还可以用$'...'格式,支持C风格的转义符,同时处理单双引号超方便:

echo $'He said: "Hello!" \'Let\'s fix this command!\''

这种方式里的\"和\'都会被正确解析成对应的引号。

小提醒

不同shell的引号规则可能有细微差别,比如zsh和bash在某些场景下的处理不同,如果遇到奇怪的报错,可以先确认自己用的是哪种shell哦!

内容的提问来源于stack exchange,提问作者Kellyson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:28:37