4

Я был пользователем UNIX больше лет, чем мне хотелось бы думать, и за это время меня научили ожидать, что когда в программе дадут противоречивые переключатели, побеждает последний. Недавно я заметил, что

cat -bn file

а также

cat -nb file

оба используют опцию -b (число непустых строк) над опцией -n (нумерация всех строк). Такое поведение наблюдается как в BSD, так и в Linux, поэтому я не думаю, что это особенность реализации. Это что-то, что указано где-то, и я просто схожу с ума, ожидая, что первый пример будет нумеровать все строки?

2 ответа2

5

Я взглянул на исходный код FreeBSD для cat(1), и соответствующие исходные строки:

case 'b':
    bflag = nflag = 1;  /* -b implies -n */

Так что это выглядит как обдуманное дизайнерское решение; Интерпретация -b заключается в том, что он изменяет поведение -n , а не -b и -n являющихся двумя взаимоисключающими альтернативами.

1

Большинство системных команд используют стандартную библиотеку C getopt(3) или несколько вариантов и анализируют параметры слева направо. Итак, как вы заметили, последний побеждает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .