2016-12-31 126 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去掉前導空格。缺點是這不允許在最後的分隔符上進行任何縮進。 –