Linux Shell中给变量赋多行文本主要靠引号和换行符配合:双引号内直接换行可保留换行符,需用echo "$text"输出;Here Document亦可实现。

Linux Shell中给变量赋多行文本,主要靠引号和换行符配合实现,关键在于保留换行符不被shell自动截断或替换。
用双引号包裹 + 显式换行
在双引号内直接按回车换行,shell会保留换行符(需确保未启用IFS特殊截断或命令替换干扰):
text="第一行 第二行 第三行"
这样赋值后,$text就包含实际的换行符,用echo "$text"(注意双引号!)可正确输出多行。
用Here Document(
适合内容较长、含特殊字符或缩进较多的场景,语法清晰且不易出错:
text=$(cat <<'EOF' 这是第一行 包含 $HOME 和 `date`(单引号引住EOF可禁用变量展开) 第三行末尾有空格 EOF )
- 使用
启动,以单独一行<code>EOF结束 - 若EOF用单引号括起(如
),内部所有变量、命令都不展开;不加引号则正常展开 - 注意:结尾的
EOF必须顶格、无空格、无其他字符
用反斜杠续行(适合简单、可控的多行)
每行末尾加\,把逻辑上多行拼成一行,再换行需显式写$'\n':
text="第一行\ $'\n'第二行\ $'\n'第三行"
这种写法略繁琐,但能精确控制换行位置,也兼容POSIX sh。
注意事项与常见坑
- 务必用
echo "$text"(带双引号),否则shell会把换行转为空格 - 避免用
echo $text(无引号),它会触发单词分割,丢失换行 - 如果后续要逐行处理,推荐用
while IFS= read -r line循环,而非for遍历 - 变量本身不“区分”多行与否——它只是存了一串含
\n字节的字符串,显示效果取决于你怎么用它


















