文字列を複数回印刷

文字列を複数回印刷

文字列と数値の2つのパラメータを使用するスクリプトを作成したいと思います。このスクリプトは、アスタリスクで丸められた文字列をn回印刷します。だから前の場合。script "Hello World!" 3以下を印刷します。

**************
*Hello World!*
*Hello World!*
*Hello World!*
**************

どうすればいいですか?

答え1

*文字列の長さを入力の長さと同じにするために使用できますsed。非常に簡単に繰り返すこともできます。各ラインの出力は次のようになります。

*$stars*
*$input*
...repeated...
*$stars*

*したがって、必要な文字列を配置する単純な「出力」関数を作成できます。

#!/bin/bash

string=$1
count=$2

stars=$(echo "$string" | sed 's/./*/g')

output() { printf "*%s*\n" "$1"; }

output "$stars"
for ((a=0;a<$count;a++))
{
  output "$string"
}
output "$stars"

例えば

./x "Hello world!" 3
**************
*Hello world!*
*Hello world!*
*Hello world!*
**************

答え2

これを行う1つの方法は、seqを使用して文字列がエコーされた回数を示し、printfを使用してアスタリスクに対して文字列操作を実行することです。

SAY=$1
NUM=$2
CMD="echo *$SAY*"

c="${SAY//[*]}**"
s=$(printf "%-${#c}s" "*")
echo "${s// /*}"

for i in $(seq $NUM)
do $CMD
done

echo "${s// /*}"

その後、パラメータでスクリプトを使用できます。./script.sh "Hello World" 3

関連情報