Ich habe heute ein kleines Drehbuch geschrieben, das Folgendes enthielt
grep -q ^local0 /etc/syslog.conf
Bei der Überprüfung schlug ein Mitarbeiter , dass ^local0
da zitiert werden ^
Mittel „Rohr“ in der Bourne - Shell. Überrascht von dieser Behauptung habe ich versucht, einen Hinweis darauf zu finden. Nichts, was ich im Internet gefunden habe, deutete darauf hin, dass dies ein Problem war.
Es stellt sich jedoch heraus, dass die Implementierung von bsh
(die behauptet, die Bourne-Shell zu sein) unter AIX 7 tatsächlich das folgende Verhalten aufweist:
> bsh
$ ls ^ wc
23 23 183
$ ls | wc
23 23 183
Keine der anderen "Bourne-Shell" -Implementierungen, die ich ausprobiert habe, verhält sich so (das heißt, es ^
wird überhaupt nicht als Shell-Metazeichen angesehen). Ich habe sh
CentOS (was wirklich bash ist) und sh
FreeBSD (was nicht bash ist) ausprobiert . Ich habe nicht viele andere Systeme zum Ausprobieren.
Wird dieses Verhalten erwartet? Welche Muscheln gelten ^
als Pipe-Metazeichen?
[ x"$foo" = x"bar" ]
.
bsh
es ist nicht die Bourne Shell. Der Name wird nur für die Bourne-Shell unter AIX missbraucht. bsh
ist eher eine Shell, die ich 1984 bei der H.Berhold AG unter UNOS (dem ersten UNIX-Klon) eingeführt habe. Beachten Sie, dass AIX 1984 nicht existierte.
^
ein Negationscharakter in zsh und auch im Regex-Raum ist. Als separater Kommentar wird im Allgemeinen empfohlen, einfache Anführungszeichen in grep-Ausdrücken zu verwenden, um die Portabilität über Shells hinweg zu gewährleisten.