Durchführung string-Vergleich mit Zeilenumbruch in bash
Warum funktioniert der folgende code nicht in bash? Beachten Sie, ich versuche, führen Sie ein komplexer Vergleich, wie "classextender\r"; dies ist nur ein Vereinfachtes Beispiel.
Kann ich bestätigen, dass das carriage return, ascii 13" ist der Einstieg in das Skript. Aber ich kann nicht vergleichen, gegen Sie mit einem normalen string-Vergleich.
Das erwartete Ergebnis ist "1" für eine positive übereinstimmung.
Befehlszeile:
echo -e "\r" | ./test.sh
Skript:
ord() {
printf '%d' "'$1"
}
read a
echo "1st char: $(ord ${a:0:1})"
left="${a:0:1}"
if [ "$left" = "\r" ]; then
echo 1
fi
exit 0
Du musst angemeldet sein, um einen Kommentar abzugeben.
Folgendes möchte verdeutlichen, wie Sie ermitteln können, ob der string einen Wagenrücklauf enthält:
Ausführen, indem Sie sagen:
zurückkehren würde
EDIT: Wenn Sie möchten, Abbildung, ob das Letzte Zeichen eines Strings einen Wagenrücklauf enthält, könnte man sagen:
=~
mit=
. Die$'...'
syntax ist nicht besonderes, reguläre Ausdrücke passen; es ist nur ein Weg, zu konstruieren, ein string, in dem bestimmte escaped Zeichen haben eine Besondere Bedeutung."test"$'\r'
zum Spiel gegentest\r
, richtig? Ich habe jetzt erinnern, das '$' syntax, aber ich nutze es so selten, das hatte ich ganz vergessen!