Каково значение этого проверяемого выражения

Это действительно имеет место. 389 родительский проект для этих сервисов. Имя изменилось на это, чтобы лишить от брендинга того, чтобы быть "Red Hat" и поощрить принятие через другие разновидности Linux.

1
05.04.2013, 01:34
2 ответа

Это совпадает с:

[ `echo hi` ] > /dev/null

перенаправления могут появиться где угодно на строке.

При нормальном состоянии это совпадает с

[ hi ]

Который самостоятельно совпадает с:

true

Это - команда, которая ничего не производит и возвращает статус выхода успеха.

Результат может отличаться если:

  • сбои перенаправления, например, если Вы достигли предела открытых файлов или не имеете доступа для записи к /dev/null (которого снова не должно происходить при нормальных условиях). В этом случае оболочка возвратится с ненулевым статусом выхода, и Вы будете видеть сообщение об ошибке, и [ команда не будет выполнена.
  • Сбои замены команды (например, потому что Вы не можете больше разветвлять процесс или не можете запустить канал, потому что Вы достигли макс. количества дескрипторов файлов). В этом случае, в зависимости от оболочки, много вещей могут произойти включая прерывание оболочки.
  • если $IFS содержит также h или i, затем это решит к (например, для IFS=h): [ '' i ], который недопустим и вызовет [ возвратить ошибку и установить статус выхода на неуспех.
  • возможно более странные вещи, если [ или echo были переопределены, чтобы сделать, чему-то еще нравится, играют мелодию или перезагружают компьютер.

В целом, та команда не имеет смысла и была, вероятно, записана в единственном намерении смущения Вас.

3
27.01.2020, 23:12
  • 1
    Это - большой анализ, спасибо. На самом деле команда прибывает из опечатки, которую я сделал (я означал помещать перенаправление в замене команды), и не ожидал, что это выполнится, но это сделало. Я не знал о том, что перенаправления могут появиться где угодно на строке. У Вас была бы ссылка для этого? –  gpo 05.04.2013, 14:10
  • 2
    @gpo, Посмотрите спецификацию POSIX: "простая команда" является последовательностью дополнительных переменных присвоений и перенаправлений, в любой последовательности, дополнительно сопровождаемой словами и перенаправлениями, завершенными оператором управления. Весьма распространено записать вещи как < foo tr a b > bar или echo>&2 error например. –  Stéphane Chazelas 05.04.2013, 15:16
  • 3
    Но в тесте создают, у нас есть условное выражение, которое не является тем же как "простой командой", нет? –  gpo 05.04.2013, 15:43
  • 4
    Да, [ команда, обычно встроенная как echo или :. См. этот ответ на другой вопрос о [ –  Stéphane Chazelas 05.04.2013, 16:09

Хорошо. Я - новичок удара, но: Хотя Ваш вопрос ясен, я не абсолютно уверен, что получаю то, что Вы просите. Это, возможно, от метки. Скажите раз так.

TEST IF "echo hi > /dev/null" is success

[ `echo hi` > /dev/null ]
| |   |   | |           |
| |   |   | |           +--- Last test argument
| |   |   | +--------------- Redirect standard out to /dev/null
| |   |   +----------------- Backtick - End Command Substitution
| |   +--------------------- echo hi
| +------------------------- Backtick - Start Command Substitution
+--------------------------- Test

Если или эхо или сбои перенаправления, протестируйте сбой, еще успех.

Когда команда выполняется, она имеет код выхода, показывающий успех, 0, или ошибка <> 0. Таким образом, если любой сбои все перестало работать.

Шаблон "[ ... ]" не как в if (foo == bar), но [ на самом деле команда, которые требуют ] как длятся аргумент.

Это также разъясняется почему одно пространство потребности после и прежде [ и ].

5
27.01.2020, 23:12
  • 1
    я думаю, что Stephane закрепил его. Я ожидал ошибку интерпретации, потому что перенаправление вне замены команды. Но, как Stephane отметил, перенаправления могут появиться где угодно на строке. Остальное не очень трудно выяснить, но я не был очень ясен со своим вопросом также. Спасибо за Ваш ответ так или иначе. –  gpo 05.04.2013, 14:19

Теги

Похожие вопросы