摘要
插入
n
p="${var1}n${var2}"echo -e “${p}”
在源代码中插入新行
p="${var1}${var2}”
echo “${p}”使用
$'n'
(仅bash和zsh)p="${var1}"$'n'"${var2}"echo “${p}”
细节
1.插入 n
p="${var1}n${var2}"echo -e "${p}"echo -e将两个字符解释
"n"为换行符。
var="a b c"first_loop=truefor i in $vardo p="$pn$i" # Append unset first_loopdoneecho -e "$p" # Use -e
避免多余的换行符
var="a b c"first_loop=1for i in $vardo (( $first_loop )) && # "((...))" is bash specific p="$i" || # First -> Set p="$pn$i" # After -> Append unset first_loopdoneecho -e "$p" # Use -e
使用功能
embed_newline(){ local p="$1" shift for i in "$@" do p="$pn$i" # Append done echo -e "$p" # Use -e}var="a b c"p=$( embed_newline $var ) # Do not use double quotes "$var"echo "$p"2.在源代码中插入新行
var="a b c"for i in $vardo p="$p$i" # New line directly in the source predoneecho "$p" # Double quotes required # But -e not required
避免多余的换行符
var="a b c"first_loop=1for i in $vardo (( $first_loop )) && # "((...))" is bash specific p="$i" || # First -> Set p="$p$i"# After -> Append unset first_loopdoneecho "$p" # No need -e
使用功能
embed_newline(){ local p="$1" shift for i in "$@" do p="$p$i"# Append done echo "$p" # No need -e}var="a b c"p=$( embed_newline $var ) # Do not use double quotes "$var"echo "$p"3.使用$'n'
(便携式性较低)
bash和zsh解释
$'n'为换行符。
var="a b c"for i in $vardo p="$p"$'n'"$i"doneecho "$p" # Double quotes required # But -e not required
避免多余的换行符
var="a b c"first_loop=1for i in $vardo (( $first_loop )) && # "((...))" is bash specific p="$i" || # First -> Set p="$p"$'n'"$i" # After -> Append unset first_loopdoneecho "$p" # No need -e
使用功能
embed_newline(){ local p="$1" shift for i in "$@" do p="$p"$'n'"$i" # Append done echo "$p" # No need -e}var="a b c"p=$( embed_newline $var ) # Do not use double quotes "$var"echo "$p"所有输出都相同
abc
特别感谢以下答案的贡献者:kevinf,GordonDavisson,l0b0,Dolda2000和Tripleee。
编辑
- 另请参见BinaryZebra的答案,其中提供了许多详细信息。
- Abhijeet Rastogi的答案和Dimitry的答案说明了如何避免
for
上述bash片段中的循环。



