Linux Shell中拼接字符串变量直接连写即可,推荐用${var}避免歧义;多变量拼接可连续书写;命令替换需用双引号或不加引号;含空格或特殊字符时必须用引号包裹整个表达式。

Linux Shell 中拼接字符串变量非常直接,不需要特殊操作符,只要把变量和字面量挨着写就行,但要注意引号使用和空格位置。
变量与字面量直接拼接
最常用的方式是把变量引用和普通文本连在一起,推荐用 ${var} 形式避免歧义:
-
path="/etc"→full="${path}/nginx.conf"→ 结果是/etc/nginx.conf -
name="log"→file="${name}_2024.txt"→ 结果是log_2024.txt - 不加大括号也能工作(如
$name_end),但遇到_end这类后缀时容易误解析为变量name_end,所以强烈建议始终用 ${name}_end
多变量之间拼接
多个变量或变量+字面量可以连续书写,Shell 自动合并:
-
dir="/var",sub="log",ext=".txt" -
file="${dir}/${sub}${ext}"→/var/log.txt -
msg="User "$USER" logged in"(不加引号也可,但含空格时需整体用双引号包裹)
命令替换参与拼接
把命令执行结果当作字符串片段嵌入拼接中:
-
now=$(date +%H:%M)→logname="backup_${now}.tar.gz" -
host=$(hostname)→id="${host}-$(date +%s)" - 注意:单引号内
'$(date)'不会执行命令,必须用双引号或不加引号
处理含空格或特殊字符的文本
拼接内容含空格、$、反引号等时,必须用引号包裹整个表达式:
- 错误:
msg=$USER is here→ Shell 把is当作命令 - 正确:
msg="$USER is here"或msg="${USER} is here" - 要拼接带双引号的文本:
str="say \"hello\""或str='say "hello"'


















