Ich bin seit mehr Jahren ein UNIX-Benutzer, als ich denken möchte, und in dieser Zeit wurde ich darauf trainiert, zu erwarten, dass der letzte gewinnt, wenn widersprüchliche Schalter an ein Programm vergeben werden. Kürzlich habe ich das bemerkt
cat -bn file
und
cat -nb file
Beide verwenden die -b
Option (nummerieren Sie nicht leere Zeilen) über der -n
Option (nummerieren Sie alle Zeilen). Ich habe dieses Verhalten sowohl unter BSD als auch unter Linux, daher halte ich es nicht für eine Implementierungs-Eigenheit. Ist das irgendwo spezifiziert und bin ich nur verrückt, wenn ich erwarte, dass das erste Beispiel alle Zeilen nummeriert?
command-line
unix
cat
Chas. Owens
quelle
quelle
-b
Zahlen Leerzeilen. Tatsächlich werden nicht-leere Zeilen entsprechend jeder Manpage nummeriert, die ich angeschaut habe (Ubuntu / GNU, FreeBSD, HP / UX).Antworten:
Ich habe mir den FreeBSD-Quellcode für cat (1) angesehen und die relevanten Quelltextzeilen lauten:
Das sieht also nach einer bewussten Designentscheidung aus. die Interpretation
-b
ist , dass es das Verhalten ändert-n
, statt-b
und-n
sind zwei sich gegenseitig ausschließende Alternativen.quelle
-n
in "Nummernzeilen" ohne das Wort "alle" dokumentiert wäre, würde ich dem Code zustimmen. Hmm, aber auf der BSD-Manpage steht "Number the output lines, starting at 1", also ist dies wirklich nur ein Problem mit der Dokumentation von GNU cat.Die meisten Systembefehle verwenden die C-Standardbibliothek getopt (3) oder eine Variation und analysieren die Optionen von links nach rechts. Wie Sie gesehen haben, gewinnt der Letzte.
quelle