forループがある場合は、2つのタブスペースを使用して結果を表示する方法

forループがある場合は、2つのタブスペースを使用して結果を表示する方法

次の結果を得るためのコードを作成したいと思います。

echo -e "\t\tPlease enter your name?"
read name
name="${name,,}"
for i in $(echo "Hello " $name) ; do
    echo ${i^} 
done | sed 's/^/\t\t/;s/$/, here is your order:/'

次の名前を入力すると:mike denver

出力は次のとおりです

<here come out the right space of two tabs>Hello, here is your order:
<here come out the right space of two tabs>Mike, here is your order:
<here come out the right space of two tabs>Denver, here is your order:

デフォルトでは、私が配置したタブの数()に基づいて左から右のスペースを生成しますが\tHello入力した名前ごとにプラスラインを繰り返し印刷します。 sedコマンドを外部に置く方法を理解していません。私の予想結果は次のとおりです。

<here come out the right space of two tabs>Hello, Mike Denver here is your order: 

答え1

forこれはループを使用するよりもはるかに簡単です。

echo -e "\t\tPlease enter your name?"
read -a name
name="${name}"
echo -e "\t\tHello ${name[@]^}, here is your order:"

出力:

            Please enter your name?
mike denver
            Hello Mike Denver, here is your order:

パラメータの周囲の二重引用符はecho変数を拡張し、すべてを目的の形式で一度に印刷します。

答え2

配列を名前として使用でき、次のようになりますprintf

read -p $'\t\tPlease enter your name?\n' -a name
name=( "${name[@],,}" )
printf '\t\tHello %s, here is your order:\n' "${name[*]^}"

関連情報