我的 shell 脚本文件中的代码是这样的:
for i in {0..3}
do
COLOR_Value="\033[1;3"$i"m \t Hello World"
echo -e $COLOR_Value
done
输出是这样的:(每个 Hello World 在重新打印每一行时都会改变颜色)
Hello World
Hello World
Hello World
我希望它这样做:
Hello World
Hello World
Hello World
我可以进行哪些更改以获得我想要的输出?
答案1
printf
在shell 中使用bash
适当的字符串宽度:
string='Hello World!'
for i in {0..3}; do
width=$(( ${#string} + i*5 ))
printf '%*s\n' "$width" "$string"
done
这使用printf
占位符%*s
,这意味着“下一个参数指定宽度的右对齐字符串”。宽度的计算方式为字符串的长度加乘以i
5。这意味着在第一次迭代中,您会在字符串前面获得 0 个额外空格,在第二次迭代中获得 5 个额外空格,在第三次迭代中获得 10 个额外空格,在最后一次迭代中获得 15 个额外空格。
有颜色:
string='Hello World!'
for i in {0..3}; do
width=$(( ${#string} + i*5 ))
tput setaf "$(( i + 1 ))"
printf '%*s\n' "$width" "$string"
done
tput sgr0 # reset colors
或者将颜色更改作为printf
输出字符串的一部分(在每个字符串后重置):
string='Hello World!'
color_reset=$( tput sgr0 )
for i in {0..3}; do
width=$(( ${#string} + i*5 ))
color=$( tput setaf "$(( i + 1 ))" )
printf '%s%*s%s\n' "$color" "$width" "$string" "$color_reset"
done
运行它:
$ bash script.sh
Hello World!
Hello World!
Hello World!
Hello World!