Ich mag die Case-Anweisung verwenden, Zeichenfolgen zu vergleichen.
Ein triviales Beispiel ist
case "$input"
in
"$variable1") echo "matched the first value"
;;
"$variable2") echo "matched the second value"
;;
*[a-z]*) echo "input has letters"
;;
'') echo "input is null!"
;;
*[0-9]*) echo "matched numbers (but I don't have letters, otherwise the letter test would have been hit first!)"
;;
*) echo "Some wacky stuff in the input!"
esac
ich verrückte Dinge wie
case "$(cat file)"
in
"$(cat other_file)") echo "file and other_file are the same"
;;
*) echo "file and other_file are different"
esac
Und das funktioniert auch getan haben, mit einigen Einschränkungen, wie die Dateien nicht als ein paar mehr sein können Megabyte und die Shell sieht einfach keine Nullen. Wenn also eine Datei voll mit Nullen ist und die andere keine (und auch keine andere), wird dieser Test keinen Unterschied zwischen den beiden sehen.
Ich verwende den Dateivergleich nicht als ein ernstes Beispiel, nur ein Beispiel dafür, wie die case-Anweisung viel flexiblere Zeichenfolgenabgleiche ausführen kann als mit test oder expr oder ähnlichen Shell-Ausdrücken.
'$ {var1: 0: 4}' - wo hast du diese Syntax her? Es ist definitiv nicht POSIX. –
Meine Version von cut besagt, dass die Positionen beginnend bei 1 nummeriert sind. "Cut -c 1-4" oder "cut -c -4" geben hier den korrekten Wert zurück. – jotr