
次の結果を得るためのコードを作成したいと思います。
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:
基本的に、入力したタブの数 ( ) に基づいて左側から右側のスペースを作成します\t
が、入力された名前ごとにプラスの印刷行を繰り返しますHello
。 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[*]^}"