Linux Shell字符串拼接需注意变量边界与引号规则:直接写$a$b可拼接,含字面量时用${a}_$b;双引号内支持空格和命令替换,单引号不展开变量;Bash 4.0+支持+=追加;特殊字符需引号嵌套或转义。

Linux Shell 中拼接字符串和变量值很常见,关键在于写法清晰、边界明确,避免因变量名混淆或空格导致出错。
直接拼接(最常用)
把变量名紧挨着写,中间不加空格,Shell 会自动识别并展开:
- a="hello",b="world",写成 c=$a$b → 结果是 helloworld
- 如果后面要加字面量(比如下划线),建议用大括号: c=${a}_$b → hello_world
- 不加括号时,像 $ab 会被解释为变量 ab,不是 a 和 b 拼接,容易出错
双引号内拼接(推荐用于含空格或需解析的场景)
用双引号包裹整个表达式,变量仍可被展开,还能保留空格、命令替换等特性:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- path="/etc",dir="sysctl.d",写成 full="$path/$dir" → /etc/sysctl.d
- 混入字面量更安全:msg="User: $USER, time: $(date +%H:%M)"
- 单引号内变量不会展开,所以不能用于拼接变量值,只适合纯文本
使用 += 运算符(Bash 4.0+ 支持)
适合多次追加内容,逻辑更直观:
- str="",然后 str+="Hello",再 str+=" ",最后 str+="World"
- 执行后 echo "$str" 输出 Hello World
- 注意:仅 Bash 支持,sh 或 dash 等轻量 shell 不可用
处理特殊字符:引号嵌套与转义
当字符串本身要包含双引号或单引号时,需配合引号切换或转义:
- 要让变量值是 "abc":写成 s='"abc"'(外单内双)
- 要让变量值是 'def':写成 s="'def'"(外双内单)
- 混合使用更灵活:msg="He said: \"Hi\"" → He said: "Hi"

















