Jestem użytkownikiem systemu UNIX od wielu lat, niż się nad tym zastanawiam, i w tym czasie zostałem wyszkolony, aby oczekiwać, że w przypadku podania sprzecznych przełączeń programowi wygrywa ostatni. Ostatnio to zauważyłem
cat -bn file
i
cat -nb file
oba używają -b
opcji (liczba niepustych linii) nad -n
opcją (numeruje wszystkie linie). Dostaję to zachowanie zarówno na BSD, jak i Linuksie, więc nie sądzę, że jest to dziwactwo implementacyjne. Czy to jest gdzieś określone i czy jestem po prostu szalony, że oczekuję, że pierwszy przykład będzie numerował wszystkie wiersze?
command-line
unix
cat
Chas. Owens
źródło
źródło
-b
puste linie. W rzeczywistości powoduje to, że niepuste wiersze są numerowane zgodnie z każdą stroną podręcznika, którą przeglądałem (Ubuntu / GNU, FreeBSD, HP / UX).Odpowiedzi:
Wziąłem spojrzeć na kodzie źródłowym FreeBSD dla kotów (1) , oraz odpowiednie linie źródłowe są:
Wygląda to na celową decyzję projektową; interpretacja
-b
jest to, że modyfikuje zachowanie-n
, zamiast-b
i-n
będąc dwa wzajemnie wykluczające się alternatywy.źródło
-n
zostały udokumentowane do „linii numerycznych” bez słowa „wszystkie”, zgodziłbym się z kodem. Hmm, ale patrząc na stronę BSD mówi: „Numeruj linie wyjściowe, zaczynając od 1”, więc tak naprawdę jest to tylko problem z dokumentacją GNU cat.Większość poleceń systemowych używa standardowej biblioteki C getopt (3) lub jakiejś odmiany i analizuje opcje od lewej do prawej. Tak więc, jak zauważyłeś, ostatni wygrywa.
źródło