В третьем случае, я полагаю, вы используете GNU coreutils. В GNU testтекст справки содержит эту заметку:
NOTE: [ honors the --help and --version options, but test does not.
test treats each of those as it treats any other nonempty STRING.
Это расширение не POSIX ; Похоже, мотивация заключается в том, что testэти аргументы следует рассматривать как строки, как и любые другие. [в состоянии отличить регистр варианта от регистра строки по наличию закрывающей ]скобки.
Обратите внимание, что ваша оболочка, скорее всего, предоставит свою собственную [, и вам придется /bin/\[использовать эту версию.
[это то же самое, что testи оболочка, встроенная в некоторые оболочки.
Если вы посмотрите дальше man test, он описывает, с какими действительными EXPRESSIONвы можете проверить:
Пропущенное выражение по умолчанию имеет значение false. В противном случае EXPRESSION имеет значение true или false и устанавливает статус выхода. Это один из: ...
Это не может быть очевидным для вас от человека-страницы, но в более старых / некоторых других оболочках, как [и testдоступны как фактические команды, это означает , что пространство вы видите [ EXPRESSION ]является обязательным для EXPRESSIONбыть принято в качестве аргумента для [/ test. Таким образом, даже для оболочек, которые предлагают их как встроенные, они сохраняют этот формат для совместимости.
И, как объясняется в ответе @ dr01 , пока я пишу это, правая квадратная скобка не обязательна.
@don_crissti спасибо за хедз-ап, думаю, я просто опущу это последнее предложение ...
hjk
0
[ OPTION на самом деле не хватает скобки.
На самом деле, что может быть удивительно, [команда (расположенная в /usr/bin/[) эквивалентна test. Поэтому было (по крайней мере, теоретически) разрешено использовать только левую скобку, а правая скобка служила синтаксическим сахаром. Тем не менее, новые версии оболочки требуют этого .
Существуют ли другие различия между ними, testкоторые нельзя использовать с опцией (не указана с такой возможностью).
Шужэн
1
Это не разрешается опускать правую скобку, либо в POSIX или GNU [.
Майкл Гомер
@MichaelHomer Да. Исправлено.
Др_
Я не уверен, что Баш имеет отношение к этому ...
Майкл Гомер
1
@MichaelHomer, в POSIX, поведение, если вы опускаете правую скобку, не указано, поэтому POSIX- скрипту не разрешается опускать ], но POSIX [может делать то, что ему нужно, в том числе вызывать вас по именам и перезагружать компьютер или печатать сообщение справки. если вы позвоните без него. Это позволяет GNU grep«S [ --version. test --versionи, тем не [ --version ]менее, должны возвращать true (проверка на наличие --versionнепустой строки) и ничего не выводить.
[ OPTION
на самом деле не хватает скобки.На самом деле, что может быть удивительно,
[
команда (расположенная в/usr/bin/[
) эквивалентнаtest
. Поэтому было (по крайней мере, теоретически) разрешено использовать только левую скобку, а правая скобка служила синтаксическим сахаром. Тем не менее, новые версии оболочки требуют этого .источник
test
которые нельзя использовать с опцией (не указана с такой возможностью).[
.]
, но POSIX[
может делать то, что ему нужно, в том числе вызывать вас по именам и перезагружать компьютер или печатать сообщение справки. если вы позвоните без него. Это позволяет GNUgrep
«S[ --version
.test --version
и, тем не[ --version ]
менее, должны возвращать true (проверка на наличие--version
непустой строки) и ничего не выводить.