如何在Bash shell脚本中为字符串生成边框?

3

是否有办法在Bash中使用像-|这样的字符生成给定字符串周围的边框,并自动扩展到字符串的长度?给定的字符串不应包含EOF序列,并在处理时被删除。

echo "------------------"
echo "| External Drive |"
echo "------------------"

1
你目前的尝试是什么?你卡在哪里了? - tripleee
1
http://unix.stackexchange.com/questions/70615/bash-script-echo-output-in-box - tripleee
2个回答

6

我在另一个Stack Exchange网站上找到了一个解决方案,它使用的是sed。与这个问题的措辞略有不同。

border()
{
    title="| $1 |"
    edge=$(echo "$title" | sed 's/./-/g')
    echo "$edge"
    echo "$title"
    echo "$edge"
}

border "External Drive"

结果

------------------
| External Drive |
------------------

3
小功能可以做到这一点,无需外部工具:
border () {
    local str="$*"      # Put all arguments into single string
    local len=${#str}
    local i
    for ((i = 0; i < len + 4; ++i)); do
        printf '-'
    done
    printf '\n| %s |\n' "$str"
    for ((i = 0; i < len + 4; ++i)); do
        printf '-'
    done
    echo
}

一旦这个被引用,例如将它添加到你的.bashrc文件中,就可以直接调用而无需加引号。
$ border multiple words
------------------
| multiple words |
------------------

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接