So zeigen Sie die Ergebnisse mit zwei Tabulatoren an, wenn eine For-Schleife vorhanden ist

So zeigen Sie die Ergebnisse mit zwei Tabulatoren an, wenn eine For-Schleife vorhanden ist

Ich möchte einen Code erstellen, um folgendes Ergebnis zu erhalten:

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:/'

Wenn ich den Namen so eingebe:mike denver

Die Ausgabe ist:

<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:

Im Grunde erstellt es den rechten Abstand von der linken Seite basierend auf der Anzahl der Tabulatoren, die ich gesetzt habe ( \t), aber es wiederholt die Druckzeile für HelloPlus für jeden eingegebenen Namen. Ich habe nicht verstanden, wie ich den sed-Befehl außerhalb einfügen soll. Mein erwartetes Ergebnis sollte folgendes sein:

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

Antwort1

Anstatt die forSchleife zu verwenden, ist es viel einfacher, einfach Folgendes zu tun:

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

Ausgabe:

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

Doppelte Anführungszeichen um das Argument „for“ echoerweitern die Variable und drucken alles auf einmal im gewünschten Format.

Antwort2

Sie könnten ein Array für den Namen verwenden und printf:

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

verwandte Informationen