私のシェルスクリプトファイルのコードは次のとおりです。
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
シェルで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 個の追加の空白が生成され、2 回目の反復では 5 つの追加の空白が生成され、3 番目の反復では 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!