bash多行字符串缩进问题?

问题:
怎么使字符串b输出时每行缩进4个空格?
图片描述

希望得到的效果:
图片描述

求教!

阅读 5.8k
4 个回答

如果要求是除了第一行,都缩进,用sed很方便:

a="test message:"
b="a\nb\nc\nd\n"
c="$a\n$b"
printf "$c" | sed '1!s/^/    /'

或者使用bash的参数替换功能,"\n"对bash来说,只是两个普通字符,在它后面加4个空格就是了:

printf "${c//\\n/\n    }"

如果是希望给变量b加上缩进,那可以:

b="$(printf $b | pr -to4)"
a="test message:"
s="    "
b="$s"a"\n$s"b"\n$s"c"\n$s"d"\n"
c="$a\n$b"
printf "$c"

clipboard.png

a="test message"
b="a b c d"
c="$a $b"
printf '%s %4s\n%4s\n%4s\n%4s\n%4s\n' $c
test message
   a
   b
   c
   d

可以这样:

a="test message:"
b="\ta\n\tb\n\tc\n\td\n"
c="$a\n$b"
printf "$c"