Bash - 去除缩进的多行字符串中的空格

5

这可能是一个更加一般性的问题,所以提前道歉。我正在创建一个脚本,并认为使用多行字符串会比使用多个printf或echo语句更好。假设我有以下内容:

while :
do
 printf "line 1
 line 2
 line 3"
done

第二行和第三行前面会有一个空格打印出来,因为文件中有缩进。
l1
 line 2
 line 3

除了去除代码缩进之外,有没有其他方法防止这种情况?另外,如果需要输出跨越多行的信息,只使用多个printf / echo语句是否被认为是更好的做法?
3个回答

5
使用制表符(即空格)进行缩进,并使用heredoc(使用<<-)来实现。
cat <<- EOF
  line 1
  line 2
  line 3
EOF

2
请注意:“缩进”使用制表符而不是空格。如果您的编辑器插入空格而不是“制表符”,则可以省略缩进并简单地使用<<作为“heredoc” sigil。 - David C. Rankin

2

多行字符串看起来总是有点丑陋,或者有一些其他的缺点,我很遗憾。在 bash 代码中嵌入它们最易读的方法可能是使用 here-doc,它几乎完全显示了字符串输出时的样子。作为额外的技巧,您可以使用额外的标点符号使 here-doc 分隔符从字符串本身中脱颖而出,像这样:

if true
then
    some commands

    cat <<"____EndOfTextBlock____"
This text here
spans multiple        
lines.
____EndOfTextBlock____

    some other commands
    even more commands
fi

0
你可以在脚本中保留缩进(例如为了更好的可读性),同时使用sed将其从输出中删除。
cat << EOT | sed 's/^ *//g'
    line1
    line2
    line3
EOT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接