使echo“autofill”成为一定宽度的线

时间:2014-04-09 09:52:29

标签: bash echo

我有一个相当大的bash脚本,它读入了许多变量然后回显它们。我无法事先知道这些变量的长度,我不想缩短它们或以任何方式格式化它们 - 我只是希望它们以与读入它们相同的形式回显。

为了提高我的脚本输出的可读性,我回应了一些帮助眼睛的线,如下所示:

echo "--------------------------------"
echo "Here come some variables       |"
echo "                               |"
echo "a = $a and b = $b"
echo "                               |"
echo "End of the script              |"
echo "--------------------------------"

这将输出:

--------------------------------
Here come some variables       |
                               |
a = 1.23e-19 and b = hello
                               |
End of the script              |
--------------------------------

我想要实现的是echo(或一些替代解决方案)来识别在打印变量后需要插入多少空白空间,以便它可以将垂直线|与其余的,所以这个输出看起来像这样:

--------------------------------
Here come some variables       |
                               |
a = 1.23e-19 and b = hello     |
                               |
End of the script              |
--------------------------------

它不需要只是echo解决方案,但我会感谢简单。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我现在无法访问Linux机器,但也可以在命令行上使用printf。所以你可以使用printf " a = %10s and b= %10s |\n" "$a" $b"

您可以使用格式说明符来改善结果。

答案 1 :(得分:1)

使用printf详细阐述Axel的回答可以做到这一点。如果线宽是线宽,那么:

a="1.23e-19" 
b="hello"
linewidth=30
echo "--------------------------------"
echo "Here come some variables       |"
echo "                               |"
printf "%-${linewidth}s |\n" "a = $a and b = $b"
echo "                               |"
echo "End of the script              |"
echo "--------------------------------"

完全符合我的要求。输出:

--------------------------------
Here come some variables       |
                               |
a = 1.23e-19 and b = hello     |
                               |
End of the script              |
--------------------------------