Что означают ' &&
', ' \
' и ' -
' в конце команд bash?
В частности, я столкнулся со следующей комбинацией строк, которые должны добавить открытые ключи в менеджер пакетов aptitude в Ubuntu, для чего эти символы используются здесь?
gpg --keyserver keyserver.ubuntu.com --recv 26C2E075 && \ gpg --export --armor 26C2E075 | sudo apt-key add - && \ sudo apt-get update
Ответы:
«&&» используется для объединения команд таким образом, что следующая команда запускается тогда и только тогда, когда предыдущая команда завершилась без ошибок (или, точнее, выйдет с кодом возврата 0).
«\» само по себе в конце строки является средством объединения строк вместе. Итак, следующие две строки:
обрабатываются точно так же, как если бы строка была написана как одна строка:
«-» - это аргумент командной строки без конкретной функции bash. Как именно он обрабатывается, зависит от выполняемой команды (в данном случае apt-key ). В зависимости от контекста, он обычно используется для указания либо « читать данные из стандартного ввода, а не из файла », либо « обрабатывать оставшуюся часть строки как данные, а не как аргументы командной строки ».
источник
источник
&& - это логическое И:
&& - это способ выражения логического И , то есть все выражение истинно, только если обе его стороны истинны. В логике говорят, что все утверждение (P & Q) верно только тогда, когда оба P и Q верны.
Как следствие этого, компьютеры обычно рассматривают P & Q как оценку короткого замыкания . Таким образом, поскольку весь оператор будет истинным, только если оба параметра P и Q истинны, то, если P ложен, оператор Q не оценивается . В основном компьютеры ленивы (эффективны), и не стоит оценивать Q, если у них их тоже нет. Это также верно для логического ИЛИ, см. Предыдущую ссылку.
Три контекста && в Bash:
1) Использование оценки короткого замыкания со статусом выхода команды:
каждая команда имеет статус выхода. Если команда имеет ошибку, она имеет ненулевой статус завершения. Таким образом, если статус выхода не равен нулю и && используется для объединения команд в оператор, более поздние команды не будут оцениваться (выполняться), если предыдущая команда не имела статуса выхода 0 (True). Это из-за оценки короткого замыкания. Так что если у вас есть:
Q не будет выполняться, если P не было истинным (если P выходит со статусом чего-либо, кроме 0, это не так). Так же, как:
make не будет выполнен, если в configure произошла ошибка, значение true. Таким образом, в конечном итоге, в конце концов, это способ написать заявление if then:
Имейте в виду, что в большинстве случаев 0 равно false, но не когда дело доходит до статуса выхода.
2) && Может использоваться в встроенной тестовой команде Bash [[]]:
&& Может также использоваться внутри встроенной команды тестирования в bash [[]] для объединения выражений аналогично объединению команд. Вся тестовая операция будет истинной, только если оба операнда (стороны) && верны, например:
было бы способом сказать, если $ a является целым числом от 2 до 5 (не включая 2 и 5).
3) Арифметическая оценка:
Наконец, && может использоваться в арифметической оценке как Логическое И. Если оба (логическое И) чисел в следующем не ненулевые, он возвращает 0, иначе возвращается 1:
источник
if [./configure]
примере вы должны снять скобки. Правильноif ./configure; then make...
Я думаю, что вы будете лучше с объяснением «реального» значения, последствия это другое дело :)
\
это « escape-символ », и это один из трех механизмов цитирования, доступных в bash: Это означает, что если вы поместите escape-символ ("\") в самом конце строки, вы фактически будете избегать нового символа строки, который следует сразу за ним (RETURN char), таким образом, получая эффект "продолжить строку" другие уже объяснили в своем ответеМои 2 цента
источник