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

Sam*_*Sam 0 bash printf indentation

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

如果我有命令

printf "<image>
        <<include etc/image.conf>>
        </image>" > file.txt
Run Code Online (Sandbox Code Playgroud)

我希望file.txt看起来像

<image>
<<include etc/image.conf>>
</image>
Run Code Online (Sandbox Code Playgroud)

代替

<image>
        <<include etc/image.conf>>
        </image>
Run Code Online (Sandbox Code Playgroud)

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

While Loop
      If Statement
                printf "<image>
<<include etc/image.conf>>
</image>" > file.txt
                Command Here
      End If
End While
Run Code Online (Sandbox Code Playgroud)

我只是想让它看起来有点整洁

Wil*_*ell 5

使用heredoc:

cat <<- EOF > file.txt
    <image>
    <<include etc/image.conf>>
    </image>
EOF
Run Code Online (Sandbox Code Playgroud)

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

While Loop
      If Statement
                cat <<- EOF > file.txt 
                        <image>
                        <<include etc/image.conf>>
                        </image>
                EOF
                Command Here
      End If
End While
Run Code Online (Sandbox Code Playgroud)

请注意,这将对文本执行变量扩展等.如果您想避免这种情况,请引用分隔符.例如,cat <<- 'EOF' > file.txt