gpt4 book ai didi

bash - 在 bash 脚本中使用 printf 格式化输出

转载 作者:行者123 更新时间:2023-12-02 21:22:03 26 4
gpt4 key购买 nike

我正在编写一个脚本,在屏幕中央显示一个菜单,以便用户在 bash 脚本中使用 printf 命令选择选项。

我找到屏幕的中间列,并开始从中间列打印消息。因此,输出将显示在中心。

下面是代码片段

#!/bin/bash

INSTALLATION_HEADER=" Installater Options "

COLS=$(tput cols)

print_header ()
{
local equal=()
local title="$1"
local mid=$(((${#title}+$COLS)/2))
for (( i=0; $i < ${#title} ; i=$(($i+1)) ))
do
local hypen+="-"
done
printf "%*s\n" $mid "$title"
printf "%*s\n" $mid "$hypen"
echo ""
echo ""
}

print_install_options ()
{
local title=${1}
local mid=$(((${#title}+$COLS)/2))
for (( i=0; $i < ${#title} ; i=$(($i+1)) ))
do
local hypen+="-"
done

printf "%*s\n" $mid "$hypen"
for i in "${install_options[@]}" ;
do
printf "%*s\n" $mid "$i"
done
printf "%*s\n" $mid "$hypen"
}

install_options=("1. Install" "2. Uninstall")
print_header "$INSTALLATION_HEADER"
print_install_options "$INSTALLATION_HEADER"

当我执行上面的代码时,产生的输出是

 Installater Options
---------------------


---------------------
1. Install
2. Uninstall
---------------------

预期输出应该是

 Installater Options
---------------------


---------------------
1. Install
2. Uninstall
---------------------

“1.安装”和“2.卸载”未打印在屏幕中间。请帮我解决这个问题。

提前致谢。

更新的脚本:

感谢大家回答我的问题。

下面是给出所需输出的脚本。

#!/bin/bash

INSTALLATION_HEADER=" Installater Options "

COLS=$(tput cols)

print_header ()
{
local equal=()
local title="$1"
local mid=$(((${#title}+$COLS)/2))
for (( i=0; $i < ${#title} ; i=$(($i+1)) ))
do
local hypen+="-"
done
printf "%*s\n" $mid "$title"
printf "%*s\n" $mid "$hypen"
echo ""
echo ""
}

print_install_options ()
{
local title=${1}
local length=$(((${#title}+$COLS)))
local mid=$(((${#title}+$COLS)/2))
for (( i=0; $i < ${#title} ; i=$(($i+1)) ))
do
local hypen+="-"
done

printf "%*s\n" $mid "$hypen"
for i in "${install_options[@]}" ;
do
printf "%*s%s" $((${mid}-${#title})) "" "|"
printf "%s" " $i "
printf "%*s\n" $((${#title}-${#i}-5)) "|"
done
printf "%*s\n" $mid "$hypen"
}

install_options=("1. Install" "2. Uninstall")
print_header "$INSTALLATION_HEADER"
print_install_options "$INSTALLATION_HEADER"

输出:

 Installater Options
---------------------


---------------------
| 1. Install |
| 2. Uninstall |
---------------------

最佳答案

将第 34 行更改为

printf "%-*s%s\n" $((${mid}-${#title})) " " "$i"

结果:

                                 Installater Options 
---------------------


---------------------
1. Install
2. Uninstall
---------------------

关于bash - 在 bash 脚本中使用 printf 格式化输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26910004/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com