Bash Shell echo / printf如何以正确的方式格式化输出

时间:2016-03-03 01:36:01

标签: bash shell printf echo

我目前的代码片段看起来像这样......

#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个空格,以提高可读性和格式。保持输出的可读性和易于理解。

我向我们看了"列"选项并使输出更具动态性,并且无论屏幕大小或var结果如何,格式都是一致的。我也想在我的代码中摆脱所有" \ t" s。我试过printf没有成功。

我用Google搜索了很多不同的方式,没有看到具体的答案我正在寻找或者我可以从中找到答案。

感谢您的帮助。 顺便说一句。这是我写过的第一个代码,所以简单易行:)

1 个答案:

答案 0 :(得分:0)

您可能想尝试使用column实用程序。它的唯一目的是将输出格式化为列。这可能比尝试使用echoprintf执行相同操作更容易。

如果您必须使用printf,则您希望使用"%25.25s"等格式说明符。第一个数字是"最小字段宽度",(在这种情况下)导致输出至少25个字符宽。如果输出较短,则用空格填充。第二个数字表示要打印的最大字符数。当这两个数字相同时,它实际上表示在字符串中打印出恰好25个字符宽的字符串。您可以使用此方法强制变长字符串占用屏幕上相同的空间量。