2016-12-31 79 views
1

我想在我的bash脚本中缩进,以便我的脚本看起来更有组织性,但不希望打印空间。在Bash脚本中缩进printf命令没有在输出中出现缩进

如果我有命令

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 

我只是希望它看起来整洁

回答

1

一点点地保持脚本更具可读性和防止空格的方式与越来越:

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

使用定界符:

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

(注意:缩进应该是制表符:另一个原因是硬制表符是缩进的正确选择。)您可以在缩进中使用任意数量的制表符,并且它们将被bash bef剥离矿石被传递给cat。缩进也由分隔符剥离,所以你的最终结果会是这样的:

While Loop 
     If Statement 
       cat <<- EOF > file.txt 
         <image> 
         <<include etc/image.conf>> 
         </image> 
       EOF 
       Command Here 
     End If 
End While 

注意,这将执行变量扩展等上的文字。如果你想避免这种情况,只需引用分隔符。例如,cat <<- 'EOF' > file.txt

+0

很久以前,我停止使用选项卡。我不喜欢任何依赖于空白的逻辑。否则,这将是一个非常好的解决方案。 – codeforester

+1

如果你坚持要避免使用制表符(大错误,国际海事组织,因为你仔细制作了你的代码,这样的选择是无关的,它不会很难改变!),你可以得到几乎相同的功能'sed's/^ * //'<< EOF > file.txt'并让sed去掉前导空格。缺点是这不允许在最后的分隔符上进行任何缩进。 –