在Bash脚本printf命令中缩进,而输出中没有缩进

时间:2016-12-31 01:57:25

标签: bash printf indentation

我想在我的bash脚本中缩进,以便我的脚本看起来更有条理,但不希望打印空格。

如果我有命令

printf "<image>
        <<include etc/image.conf>>
        </image>" > file.txt

我希望file.txt看起来像

<image>
<<include etc/image.conf>>
</image>

而不是

<image>
        <<include etc/image.conf>>
        </image>

问题在于我不希望我的脚本看起来像这样

While Loop
      If Statement
                printf "<image>
<<include etc/image.conf>>
</image>" > file.txt
                Command Here
      End If
End While

我只是希望它看起来有点整洁

2 个答案:

答案 0 :(得分:6)

使用heredoc:

cat <<- EOF > file.txt
    <image>
    <<include etc/image.conf>>
    </image>
EOF

(注意:缩进应该是标签:硬标签是缩进的正确选择的另一个原因。)您可以在缩进中使用任意数量的标签,并且在传递给{{{{{\ n之前)它们将被bash剥离。 1}}。缩进也被分隔符剥离,因此您的最终结果将如下所示:

cat

请注意,这将对文本执行变量扩展等。如果您想避免这种情况,请引用分隔符。例如,While Loop If Statement cat <<- EOF > file.txt <image> <<include etc/image.conf>> </image> EOF Command Here End If End While

答案 1 :(得分:1)

为了使脚本更具可读性并防止空格妨碍:

printf "%s\n%s\n%s\n" "<image>" \
                      "<<include etc/image.conf>>" \
                      "</image>" > file.txt