清理 bash 腳本中的輸出格式
我在執行時遇到了格式化輸出的問題,同時在某些腳本中保留了程式碼的格式。以下對我有用,只是想檢查它是否合理?它似乎有點弄髒了程式碼,我會對更好的解決方案感興趣 - 我不想創建一個過於復雜的 bash 函式來處理每個可能的案例以格式化幾行。我會對允許乾淨程式碼和可預測輸出的可移植解決方案感興趣。
printf "\nLine one.... Line 2 - output on next line Line 3, output on its own newline"
我注意到 printf 會自動選擇換行符,包括您的縮進,這允許在文件中輕鬆格式化輸出,但如果您在縮進塊中工作,則可以在腳本中反對您的格式 -
if [ $# -ne 1 ]; then printf "\nLine one... Line 2 - output on next line Line 3, output on its own newline" fi
如果我在它們的塊中適當地縮進了第 2 行和第 3 行,printf 會拾取空格(製表符)並在執行時將它們輸出到我的腳本消息中。
我可以做這樣的事情,拆分行但在我的腳本和輸出中保留我的格式嗎?我想在合理的範圍內將我的行寬度保持在 80 個字元以下,但我也想正常使用 printf 格式,用 \n 控制換行符,而不是自動在我的換行符上提取引號。多個 printf 語句是唯一的方法嗎?
此行下方的編輯/解決方案程式碼
參考下面 l0b0 接受的答案,我使用了與 %s 相對的 %b 參數,並用雙引號而不是單引號初始化了 ’lines’ 變數。%b 參數允許 printf 解析我的行中的轉義序列,雙引號似乎允許傳遞我之前創建的局部變數,以簡化成功/錯誤消息的著色輸出。
RED=$(tput setaf 1) NORMAL=$(tput sgr0) lines=( "\nEnter 1 to configure vim with the Klips repository, any other value to exit." \ "The up-to-date .vimrc config can be found here: https://github.com/shaunrd0/klips/tree/master/configs" \ "${RED}Configuring Vim with this tool will update / upgrade your packages${NORMAL}\n") printf '%b\n' "${lines[@]}" read cChoice
為了澄清我在這個問題中的縮進/間距 - vim 配置為使用 .vimrc 中的以下行將製表符擴展到空格 -
" Double-quotes is a comment written to be read " Two Double-quotes ("") is commented out code and can be removed or added " Set tabwidth=2, adjust Vim shiftwidth to the same set tabstop=2 shiftwidth=2 " expandtab inserts spaces instead of tabs set expandtab
如果您使用 Tab 字元進行縮進(現在幾乎已絕跡),您可以在此處的文件中使用此技巧:
if … then cat <<- EOF first second EOF fi
如果您在該命令中用製表符替換四個空格,它將列印與
printf '%s\n' first second
.也就是說,這**
printf '%s\n' …
可能是一個更簡單的解決方案**——這樣每一行都是一個單獨的參數printf
:$ lines=('Line one...' 'Line 2 - output on next line' 'Line 3, output on its own newline') $ printf '%s\n' "${lines[@]}" Line one... Line 2 - output on next line Line 3, output on its own newline