¿Qué significan ' &&
', ' \
' y ' -
' al final de los comandos bash?
En particular, me encontré con la siguiente combinación de líneas que se supone que agregan claves públicas al administrador de paquetes de aptitud de Ubuntu, ¿para qué se usan esos caracteres aquí?
gpg --keyserver keyserver.ubuntu.com --recv 26C2E075 && \ gpg --exportar - armadura 26C2E075 | sudo apt-key add - && \ sudo apt-get update
Respuestas:
"&&" se usa para encadenar comandos, de modo que el siguiente comando se ejecuta si y solo si el comando anterior salió sin errores (o, más exactamente, sale con un código de retorno de 0).
"\" en sí mismo al final de una línea es un medio para concatenar líneas juntas. Entonces las dos líneas siguientes:
se procesan exactamente igual que si la línea se escribiera como una sola línea:
"-" es un argumento de línea de comando sin función bash específica. La forma exacta en que se maneja depende del comando que se ejecuta (en este caso, apt-key ). Dependiendo del contexto, generalmente se usa para indicar " leer datos de stdin en lugar de un archivo " o " procesar el resto de la línea como datos en lugar de como argumentos de línea de comandos ".
fuente
fuente
&& es el AND lógico:
&& es una forma de expresar AND lógico , lo que significa que toda la expresión es True solo si ambos lados son verdaderos. En lógica, se dice que toda la declaración (P&Q) solo es verdadera cuando tanto P como Q son verdaderas.
Como consecuencia de esto, las computadoras generalmente tratan a P&Q como una evaluación de cortocircuito . Entonces, dado que toda la declaración solo será Verdadera si P y Q son verdaderas, entonces si P es falsa, la declaración Q no se evalúa . Básicamente, las computadoras son perezosas (eficientes) y no se molestan en evaluar Q si no lo tienen también. Esto también es cierto para el OR lógico, consulte el enlace anterior.
Los tres contextos de && en Bash:
1) Uso de la evaluación de cortocircuito con el estado de salida de un comando:
cada comando tiene un estado de salida. Si un comando tiene un error, tiene un estado de salida que no es cero. Entonces, si el estado de salida no es cero y && se usa para encadenar comandos en una declaración, los comandos posteriores no se evaluarán (ejecutarán) si el anterior no tenía un estado de salida de 0 (Verdadero). Esto se debe a la evaluación de cortocircuito. Entonces si tienes:
Q no se ejecutará si P no es verdadero (si P sale con un estado que no sea 0, no es cierto). Igual que:
make no se ejecutará si configure tuvo un error, no era cierto. Entonces, básicamente, termina siendo una forma de escribir en la declaración if if:
Tenga en cuenta que, en la mayoría de los contextos, 0 es falso, pero no cuando se trata de un estado de salida.
2) && se puede usar en el comando de prueba integrado [[]] de Bash:
&& también se puede usar dentro del comando de prueba incorporado en bash [[]] para combinar expresiones de manera similar a la combinación de comandos. Toda la operación de prueba solo será verdadera si ambos operandos (lados) de && son verdaderos, por ejemplo:
sería una forma de decir si $ a es un número entero entre 2 y 5 (sin incluir 2 y 5).
3) Evaluación aritmética:
Por último, && se puede usar en la evaluación aritmética como AND lógico. Si los dos (lógicos Y) de los siguientes números no son cero, devuelve 0, de lo contrario se devuelve 1:
fuente
if [./configure]
ejemplo, debe quitar los corchetes. Lo correcto esif ./configure; then make...
Creo que será mejor con una explicación del significado "real", las implicaciones son otra cosa :)
\
es el " carácter de escape ", y es uno de los tres mecanismos de comillas disponibles en bash: Esto significa que si coloca un carácter de escape (el "\") al final de una línea, de hecho está escapando del nuevo carácter de línea que lo sigue inmediatamente (el carácter de RETORNO) con el efecto de "continuar la línea" otros ya han explicado en su respuestaMis 2 centavos
fuente