簡體   English   中英

Bash Shell echo / printf如何正確格式化輸出

[英]Bash Shell echo/printf how to format output the right way

我當前的代碼片段看起來像這樣...

#Location of network config files
nfds="/etc/sysconfig/network-scripts/"

#Standard prefer of network config files
fil="ifcfg-"

#Array variable that feeds "$nic"
cards= array loop built from "nic=$(ls /sys/class/net | grep en)"

#Set color for Divice labile
div="\033[38;5;39m"

#Set Fix format and colour info
fix="\033[38;5;118m"

#Set color for OK
ok="\033[38;5;28m"

#Clear All font and color info
ctf="\033[0m"

function currentCardDefRoute(){

    defr=$(grep DEFROUTE $nfds$fil$cards | cut -d = -f 2) 

    if [[ $defr = "yes" ]] || [[ $defr = "no" ]]; then
        echo -e " "$div$cards$ctf"'s current default route is\t"$div$defr$ctf"\t\t\t\t   ["$ok"OK"$ctf"]"
        $st
    else
        echo -e " "$div$cards$ctf"'s current default route is \t"$fix"Missing"$ctf"\t\t\t   ["$fix"PLEASE FIX"$ctf"]"
        $st
    fi

}

我在所有回顯行上縮進1個空格,以提高可讀性和一致的格式。 保持輸出可讀性和易於理解。

我正在尋找“ columns”選項,無論屏幕大小或var結果如何,輸出都將更加動態並具有一致的格式。 我也希望擺脫代碼中的所有“ \\ t”。 我嘗試過printf沒有成功。

我用許多不同的方式搜索了谷歌,但沒有看到我正在尋找的具體答案或可以從中得出答案的變體。

謝謝您的幫助。 順便說一句 這是我編寫的第一個代碼,所以請輕松一點:)

您可能要嘗試使用column實用程序。 它的唯一目的是將輸出格式化為列。 這可能比嘗試使用echoprintf做相同的事情要容易。

如果必須使用printf ,則需要使用格式說明符,例如"%25.25s" 第一個數字是“最小字段寬度”,在這種情況下,它導致輸出至少25個字符寬。 如果輸出較短,則用空格填充。 第二個數字表示要打印的最大字符數。 當這兩個數字相同時,它實際上表示將字符串打印在正好25個字符寬的字段中。 您可以使用它來強制變長字符串占用屏幕上相同的空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM