Как ||и && работать с составной командой в круглых скобках? - PullRequest
0 голосов
/ 09 октября 2018

Предположим, у меня есть составная команда (несколько простых команд CMD, объединенных операторами &, && и / или ||).Я окружаю его круглыми скобками, а затем помещаю другой оператор условного выполнения (&& или ||), а затем, например, команду DIR.

Успешность сбоя простых команд в моем соединенииКоманда будет иметь значение, когда интерпретатор решит, должна ли быть выполнена моя команда DIR или нет?

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

Но потом я наткнулся на эту страницу , которая гласит: «Используйте скобки для проверки успешности нескольких команд».Это подразумевает, что интерпретатор каким-то образом агрегирует уровни ошибок, возвращаемые простыми командами в составе, которые решают, должен ли (в моем примере) DIR выполняться или нет.

Так что я в замешательстве ...

1 Ответ

0 голосов
/ 09 октября 2018

Ваше первоначальное понимание верно, операторы && и || отвечают на последнюю выполненную команду (или операцию)

Следующее утверждение на исходной странице , на которую вы ссылались было неправильно .

Используйте скобки для проверки успешности нескольких команд:

(Dir C:\Test1 & Dir C:\Test2) || Echo One or more of the commands failed.

Выше будет толькоОтобразите сообщение об ошибке, если 2-й DIR не удался.

Тест можно исправить, используя && вместо &, но это простой результат логики, а не какая-то дополнительная функция.Кроме того, код замыкает накоротко - если первая команда DIR не выполнена, вторая не будет выполнена.

(Dir C:\Test1 && Dir C:\Test2) || echo One of the DIR commands failed.

И скобки не нужны.Следующее дает точно такой же результат

Dir C:\Test1 && Dir C:\Test2 || echo One of the DIR commands failed.

В моем первом предложении я сказал, что && и || могут отвечать на операции, потому что они реагируют на такие операции, как перенаправление.

Следующее сообщение ECHO выдаст пользовательское сообщение об ошибке в случае сбоя перенаправления или сбоя DIR.Обратите внимание, что перенаправление происходит перед выполнением команды.Если перенаправление завершится неудачно, команда никогда не будет выполнена:

dir c:\test >x:\output.log || echo Redirection or dir failed

Примечание

Содержание указанной страницы было исправлено с момента публикации вопросов и ответов: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...