LaunchSystems, часть ОС Mac X, который определяет, какие приложения, чтобы открыть иногда очень странно. Рад, что это работает для вас теперь. :-) Ваше первое предложение в ответе серьезно? Это кажется нелепым предполагать, что код С такие слова, как "члены сообщества должны сообщать о нарушениях данного Кодекса поведения" означает, что они должны сообщать о нарушениях на людей, которые не являются предметом этого кода (не имея на это согласился путем подписания или регистрации). Спасибо @DavidRicherby за ваш комментарий! Я бы уточнил немного: на "несущественные", я имею в виду те понятия и результаты которого уже известны. В основном я спрашивал, что соотношение кандидатскую диссертацию по математике-это оригинальные идеи авторов, теоремы, предложения, доказательства, примеры, комментарии и т. д.?

Это документально (для POSIX) в разделе 2.9.1 простых команд открытого базовые характеристики группы. Там в стене есть текст, я хочу обратить ваше внимание на последний абзац:

Если есть имя команды, выполнение должно продолжаться, как описано в команду поиска и исполнения. Если нет команды название, но команда содержит команду на замещение, команда должна закончить со статусом выхода из последней команды подстановки выполняется. В противном случае команда завершит с нулевым статусом выхода.

Так, например,

 Статус Команды Exit 
Не $ Foo=бар 0 (см. Также Примечание от Икара, ниже)
Не $ Foo=$(бар) состояние выхода из "Бар"
Не $ Foo=$(бар) баз статус выхода из "баз"
не $ Foo $(бар) состояние выхода из "фу"

Это как Баш тоже работает. Но см. Также “не так просто” в конце.

phk, в своем вопросе назначения как команды с выходом статуса, за исключением, когда есть команда замены?, предполагает

... кажется, как будто само задание считается команда ... с нулевым значением выхода, но что касается до правой части присваивания (например, подстановка команд назвать...)

Это не ужасный способ смотреть на это. Грубая схема, для определения статуса возврата простую команду (не содержащих ;, &, |, && или ||) является:

  • Сканирование линии слева направо, пока вы не дойдете до конца или командное слово (обычно название программы).
  • Если вы видите переменной, статус возврата для линии может быть 0.
  • Если вы видите команду — т. е., $(...)— принять статус выхода из команды.
  • Если вы достигнете настоящую команду (не команду), принять статус выхода из команды.
  • Состояние возврата к линии последний номер, с которым вы столкнулись.
    Команда подстановки в качестве аргументов для команды например, с Foo $(бар), не в счет; вы получаете статус выхода из ФОО. Перефразируя phk-это обозначения, поведение здесь

    temporary_variable = выполнить( "бар" )
    overall_exit_status = выполнить( "фу", temporary_variable )
    

Но это небольшое упрощение. Общее состояние возвращения из

А=$(УМК1) Б=$(УМК2) с=$(УМК3) Д=$(УМК4) е=МС2
это состояние выхода из УМК4. В Е= назначение, которое возникает после Д=назначение не устанавливает общего состояния выхода 0.

Икар, в ответ на phk вопрос, поднимает важный момент: переменные могут быть установлены как readonly. Третий-на последний абзац в разделе 2.9.1 в стандарте POSIX говорит,

Если какой-либо из переменных назначений попытка присвоить значение переменной для которых слово readonly атрибут установлен в текущей среде оболочки (независимо от того, было сделано назначение в этой среде), переменная ошибка присваивания не производится. Увидеть последствия ошибок снаряд за последствия этих ошибок.

так что если вы говорите

только для чтения в
С=Гарфилд А=Феликс Т=Тигруля

статус возврата равен 1. Это не имеет значения, если строки Гарфилд, Феликс, и/или Тигруля заменены с помощью операции подстановки команд(ы) — но см. Примечания ниже.

Раздел 2.8.1 последствия консоли ошибок есть еще куча текста, и стол, и заканчивается

Во всех случаях, показанных в таблице когда интерактивная оболочка нужна не для выхода, оболочка не осуществляет какой-либо дальнейшей обработки команды, в которой произошла ошибка.

Некоторые детали имеют смысл, а некоторые нет:

  • В А= задание иногда прерывает командной строке так что последнее предложение кажется указать. В приведенном выше примере с устанавливается Гарфилд, но Т не задано (и, конечно же, ни одного).
  • Аналогично, если c=$(УМК1)=а$(УМК2) т=$(УМК3) выполняет УМК1 но не УМК3.
    Но, в моей версии bash (которые включают 4.1.X и 4.3.Х) это не выполнить команду cmd2. (Кстати, это дополнительно потребует импичмента интерпретации phk по что значении на выходе назначение применяется перед правая сторона присваивания.)

Но вот сюрприз:

В моей версии bash,

только для чтения в
С=то один=то т=что-то ЦМД0

не выполнить команду cmd0. В частности,

С=$(УМК1)=а$(УМК2) т=$(УМК3) УМК0
выполняет УМК1 и УМК3, но не УМК2. (Обратите внимание, что это противоречит его поведение, если нет команды.) И он задает т (а также С) в окружающую среду из УМК0. Интересно, будет ли это ошибка в bash.


Не все так просто:

Первый пункт этот ответ относится к “простые команды”. Спецификация говорит:

“Простая команда” последовательность дополнительных присвоения переменных и перенаправлений, в любой последовательности, дополнительно сопровождаемый словами и редиректы, прекращается оператором управления.

Эти заявления, как в моем первом примере блока:

НЕ $ FOO=БАР
Не $ Foo=$(бар)
Не $ Foo=$(бар) баз
не $ Foo $(бар)

первые три из которых включают присвоения переменных, и последние три из которых включают команды заменами.

Но некоторые назначения переменных не так просто. Баш(1) говорит:

Операторы присваивания может также появиться в качестве аргументов этот псевдоним, объявить, верстал, экспорта, чтения, и местные встроенных команд (декларации ) команды.

Для экспорта, спецификации POSIX говорит,

СТАТУС ВЫХОДА

    0
      Все названия операндов были успешно экспортированы.
    >0
      По крайней мере одно имя не может быть экспортирован, или на -п была задана опция и ошибка.

И POSIX не поддерживает местные, но в bash(1) говорит:

Ошибкой является использование местных , когда не внутри функции. Возвращение статус равен 0, если местные используется вне функции, недопустимое имя , или имя - это только для чтения переменной.

Читая между строк, мы видим, что декларация команд

экспорт из Foo=$(бар)

и

местные функции foo=$(бар)

больше нравится

ФОО $(бар)

поскольку они игнорируют статус выхода из бара и дать вам статус выхода на основе главной команды (экспорт, местные, или фу). Итак, у нас есть странности, как

 Статус Команды Exit 
Не $ Foo=$(бар) состояние выхода из "Бар"
 (если Foo является только для чтения)
$ экспорт из Foo=$(бар) 0 (если Foo является только для чтения,
 или другую ошибку от “экспорта”)
$ местные функции foo=$(бар) 0 (если Foo является только для чтения,
 заявление не в функции,
 или другая ошибка из “местных”)

что мы можем продемонстрировать с

$ экспорт пятница=$(дата -Д завтра)
$ эхо "в пятницу = $пятница, статус = $?"
Пятница = Пт, 04 май, 2018 8:58:30 вечера, статус = 0
$ экспорт суббота=$(дата -д "послезавтра")
дата: День недопустимая дата "послезавтра"
$ эхо "в субботу = $Суббота, статус = $?"
Суббота = статус = 0

и

myfunc() {
 локальный X=$(Эхо "Фу"; "истина"); " Эхо " "х = $х -> $?"
 локальной оси Y=$("бар " Эхо""; "ложь"); " Эхо " "у = $г -> $?"
 Эхо -н ", но! "
 местные з; з=$(Эхо "баз"; ложь); " Эхо " "з = $з -> $?"
}

$ myfunc
х = ФОО -> 0
г = бар -> 0
Но! з = баз -> 1

К счастью ShellCheck ловит ошибку и поднимает SC2155, что советует

экспорт из Foo="$(mycmd)"

должны быть изменены, чтобы

фу=$(mycmd)
экспорт ФОО

и

местные функции foo="$(mycmd)"

должны быть изменены, чтобы

местные ФОО
фу=$(mycmd)