如何在Bash中将字符串拆分为多行?
在Bash中优雅地写多行字符串
兄弟,这事儿完全不用忍!Bash里有好几种优雅的多行字符串写法,完美解决80字符限制下的排版杂乱问题,甚至能实现类似Python/Ruby那样的简洁效果,给你讲几个最实用的:
1. Here Document(最推荐,类似三引号)
这是Bash里处理多行字符串的黄金方案,排版干净,还能灵活控制是否展开变量/转义字符。
基础用法(保留换行和空格,支持变量展开)
# 把多行内容赋值给变量 user_greeting=$(cat <<EOF Hello, welcome to Bash multi-line strings! 当前用户是:$USER 今天的日期是:$(date +%Y-%m-%d) EOF ) # 输出看看效果 echo "$user_greeting"
原样输出(不展开变量/转义)
如果不想让Bash解析变量、命令或者转义字符,给标记加单引号就行:
raw_str=$(cat <<'EOF' 这里的$USER不会被替换 \n也不会被转义成换行 `date`也不会执行命令 EOF ) echo "$raw_str"
这种写法和Python的三引号字符串几乎一模一样,排版完全自由,怎么写怎么输出。
2. Here String(短多行场景)
如果你的多行字符串比较短,也可以用$'...'的形式,里面用\n手动换行:
quick_note=$'今天要做的事:\n- 整理Bash笔记\n- 测试多行字符串\n- 喝杯咖啡' echo "$quick_note"
优点是写法紧凑,适合内容不多的场景,缺点是需要手动添加换行符。
3. 反斜杠续行(适合合并单行的场景)
如果只是想把长字符串拆成多行书写,但最终输出是单行的,可以用反斜杠(注意反斜杠后面不能有空格):
long_single_line="这是一段非常非常长的字符串,\ 拆成多行书写后,输出时会自动合并成一行\ 完全没有换行符" echo "$long_single_line"
如果要保留换行,就得手动加\n,但这种写法不如heredoc直观,一般不推荐用于需要保留换行的场景。
总结一下,优先用带单引号标记的Here Document,完全满足你想要的简洁多行需求,排版整齐还不容易踩坑。
内容的提问来源于stack exchange,提问作者spoovy
相关产品推荐
相关产品推荐

