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 printf
und dann die Ausgabe von rev
mit 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 rev
kein Standardbefehl ist (obwohl er recht häufig vorkommt). Hätten Sie zsh
anstelle 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 vared
im Gegensatz zu bash
's read -e
dem Benutzer ermöglicht, Zeilenumbruchzeichen (und beliebige Zeichen, sogar NUL) in den Inhalt der var
ited-Anweisung einzuschließen ed
. Die Verwendung rev
zum Umkehren würde daher nicht funktionieren, da rev
immer nur eine Zeile auf einmal bearbeitet wird.)
Denken Sie daran bash
:
- Parametererweiterungen müssen in Anführungszeichen gesetzt werden. In Ihrer
echo
Zeile haben Sie Teile in Anführungszeichen gesetzt, die nicht in Anführungszeichen gesetzt werden mussten, und die Anführungszeichen an der einzigen Stelle weggelassen, wo sie benötigt wurden. - Um eine Zeile zu lesen, ist es
IFS= read -r line
.read line
macht etwas völlig anderes. echo
kann nicht zur Ausgabe beliebiger Daten verwendet werden. Verwenden Sieprintf
stattdessen.