Что делать&&
','\
' и '-
означает в конце команд bash?
В частности, я наткнулся на следующую комбинацию строк, которые должны добавлять открытые ключи в менеджер пакетов Ubuntu aptitude. Для чего здесь используются эти символы?
gpg --keyserver keyserver.ubuntu.com --recv 26C2E075 && \ gpg --export --armor 26C2E075 | sudo apt-key add - && \ sudo apt-get update
"&&" используется для объединения команд в цепочку, так что следующая команда выполняется тогда и только тогда, когда предыдущая команда завершилась без ошибок (или, точнее, завершилась с кодом возврата 0).
"\" сам по себе в конце строки является средством объединения строк. Итак, следующие две строки:
gpg --keyserver keyserver.ubuntu.com --recv 26C2E075 && \
gpg --export --armor 26C2E075
обрабатываются точно так же, как если бы строка была записана как отдельная строка:
gpg --keyserver keyserver.ubuntu.com --recv 26C2E075 && gpg --export --armor 26C2E075
"-" - аргумент командной строки без конкретной функции bash. То, как именно это обрабатывается, зависит от выполняемой команды (в данном случае apt-key). В зависимости от контекста он обычно используется для обозначения "читать данные из стандартного ввода, а не из файла", или "обрабатывать оставшуюся часть строки как данные, а не как аргументы командной строки".
&& == if the first command succeeded, run the next one
\ == the next line is part of the first line, not two seperate lines
- == read the input from stdin (console)
&& Это логическое И:
&& - это способ выражения Логическое И, что означает, что все выражение истинно, только если истинны обе его стороны. В логике говорится, что весь утверждение (P&Q) истинно только тогда, когда истинны и P, и Q.
Как следствие этого, компьютеры обычно рассматривают P&Q как оценка короткого замыкания. Итак, поскольку все утверждение будет истинным только в том случае, если истинны как P, так и Q, тогда, если P ложно, утверждение Q не оценивается. В основном компьютеры ленивы (эффективны) и не утруждают себя оценкой Q, если у них тоже нет. Это также верно для логического ИЛИ, см. Предыдущую ссылку.
Три контекста && в Bash:
1) Использование оценки короткого замыкания со статусом выхода команды:
Каждая команда имеет статус выхода. Если в команде есть ошибка, она имеет ненулевой статус выхода. Таким образом, если статус выхода отличен от нуля и && используется для объединения команд в оператор, последующие команды не будут оцениваться (выполняться), если предыдущая команда не имела статуса выхода 0 (Истина). Это из-за оценки короткого замыкания. Итак, если у вас есть:
P && Q
Q не будет выполняться, если P не соответствует истине (если P завершает работу со статусом, отличным от 0, это неверно). Так же, как:
./configure && make
make не будет выполняться, если в configure была ошибка, неверно. В общем, then в конечном итоге оказывается способом записи оператора if then:
if ./configure ; then
make
fi
Имейте в виду, что в большинстве случаев 0 является ложным, но не когда речь идет о статусе выхода.
2) && Может использоваться во встроенной тестовой команде [[]] Bash:
&& Может также использоваться внутри встроенной тестовой команды в bash [[]] для объединения выражений аналогично объединению команд. Вся тестовая операция будет истинной, только если оба операнда (стороны) && верны, например:
if [[ ( $a -gt 2 ) && ( $a -lt 5 ) ]]; then ...
будет способом сказать, является ли $ a целым числом от 2 до 5 (не включая 2 и 5).
3) Арифметическая оценка:
Наконец, && можно использовать в арифметических вычислениях как логическое И. Если обе (логическое И) из следующих чисел не равны нулю, возвращается 0, иначе возвращается 1:
kbrandt@desktop:~/$ echo $((1 & 1))
1
kbrandt@desktop:~/$ echo $((0 && 1))
0
Думаю, вам лучше объяснит "настоящий" смысл, другое дело - подтекст :)
The control operators && and || denote AND lists and OR lists, respectively. An AND list has the form command1 && command2 command2 is executed if, and only if, command1 returns an exit status of zero. [..cut..] The return status of AND and OR lists is the exit status of the last command executed in the list.А оператор управления является
A token that performs a control function. It is one of the following symbols: || & && ; ;; ( ) |
\
это "escape-символ", и это один из трех механизмов цитирования, доступных в bash: QUOTING Quoting is used to remove the special meaning of certain characters or words to the shell. [..cut..] There are three quoting mechanisms: the escape character, single quotes, and double quotes. A non-quoted backslash (\) is the escape character. It preserves the literal value of the next character that follows, with the exception of . If a \ pair appears, and the backslash is not itself quoted, the \ is treated as a line continuation (that is, it is removed from the input stream and effectively ignored). [..cut..] The backslash retains its special meaning only when followed by one of the following characters: $, `, ", \, or .Это означает, что если вы поместите escape-символ ("\") в самый конец строки, вы фактически экранирование символа новой строки который сразу следует за ним (символ RETURN), таким образом, имея эффект «продолжить линию», другие уже объяснили в своем ответе
Мои 2 цента