Befehl „rev“: Ich möchte nur $string umkehren, aber es wird auch alles vor $string umgekehrt

Befehl „rev“: Ich möchte nur $string umkehren, aber es wird auch alles vor $string umgekehrt
read -p "Input a sentence: " mystring
string=("$mystring" | rev)
echo "The sentence reversed character by character is: " $string

Ich möchte nur $string umkehren, aber es wird auch alles vor $string umgekehrt. Kann mir bitte jemand helfen?

Antwort1

Sie müssen die Zeichenfolge als Standardeingabe an übergeben rev, entweder mit einem Herestring oder Heredoc oder indem Sie die Ausgabe von weiterleiten printfund dann die Ausgabe von revmit sammelnBefehlsersetzung.

IFS= read -rep 'Input a sentence: ' mystring

string=$(
  rev <<< "$mystring"
)
# or:
string=$(
  printf '%s\n' "$mystring" | rev
)

printf '%s\n' "The sentence reversed character by character is: $string"

Beachten Sie, dass dies revkein Standardbefehl ist (obwohl er recht häufig vorkommt). Hätten Sie zshanstelle von verwendet bash, hätten Sie die Umkehrung intern durchführen können (und den Benutzer auch alles eingeben lassen können):

mystring=
vared -p 'Input a sentence: ' mystring
string=${(j[])${(s[]Oa)mystring}}
print -r The sentence reversed character by character is: $string

(Beachten Sie, dass zsh's varedim Gegensatz zu bash's read -edem Benutzer ermöglicht, Zeilenumbruchzeichen (und beliebige Zeichen, sogar NUL) in den Inhalt der varited-Anweisung einzuschließen ed. Die Verwendung revzum Umkehren würde daher nicht funktionieren, da revimmer nur eine Zeile auf einmal bearbeitet wird.)

Denken Sie daran bash:

verwandte Informationen