¿Cuál es el punto del operador "nulo" en un script BASH? Entiendo que se usa como marcador de posición después de un if
comando cuando no tiene nada que decir, pero necesita un comando para permitir que el programa se ejecute correctamente. Pero, ¿cuál es su uso general? ¿Cuándo lo usarías? ¿Cuándo tiene sentido usarlo?
13
Respuestas:
A veces es útil permitir que ocurran efectos secundarios de expansión de parámetros.
Por ejemplo, establecer un valor predeterminado
fuente
:
comando y la expansión de parámetros en el manual de bash.${name:="John Doe"}
se expandirá, lo que hará que la asignación se realice porque se lee como un argumento para:. Sin el: el shell intentará ejecutar "John Doe" como un comando, o el valor$name
si ya está configuradoTambién puedes usarlo para bucles sin fin:
fuente
while true
sea más legible, porque (a) usa menos puntuación y (b) es más similar a los lenguajes derivados de C.Puede usarlo para crear un archivo sin ejecutar un programa ::
Esto es infinitamente más rápido que
touch /path/to/file
(ya que no requiere ejecutar eltouch
programa) y puede ser marginalmente más portátil que simplementeque parece funcionar en muchos sistemas. Del mismo modo, se puede usar para verificar si tiene acceso de escritura a un archivo :
aunque esto, también, generalmente se puede hacer sin el
:
. Advertencias:(Consulte la pregunta vinculada para conocer las razones por las cuales esto es más confiable que
if [ -w /path/to/file ]
).fuente
Hace mucho tiempo, en Unix V6 y Thompson Shell, el
:
realmente se usó como parte de lagoto
declaración. Según el manual , apareció originalmente en la versión 3 de Unix:Hoy en día, en
bash
, se utiliza como operador sin operaciones, devolviendo el éxito. De hecho, si nos fijamos en el código fuente , verá que tantotrue
y:
utilizar la misma función,int colon_builtin()
, debajo. No hay:
un comando no incorporado, y en/bin/true
realidad es un comando bastante grande para lo que hace.:
podría usarse en cualquier lugartrue
, por ejemplocommand_that_can_fail || true
, en , aunque es probable que confunda a los no expertos. Lea más sobre esto aquí .fuente
Puede usarlo en la prueba positiva de un
if
comando cuando solo desea hacer algo en el lado negativo. Por ejemplo:Sin el
:
bash generaría un error de sintaxis.Este es un ejemplo demasiado simplificado. En general, usaría una técnica de este tipo en la codificación preliminar cuando aún no haya escrito ese segmento de código y solo necesite algo que no genere un error.
fuente
if pgrep firefox >/dev/null ; then : ; else echo "Firefox not running"; fi
, mostrará un error solo si Firefox no se está ejecutando. En otras palabras, cuando necesita hacer algo solo cuando el comando tiene un error. En cierto modo, esto es equivalentepgrep firefox || echo "Firefox not running"
, aunque más legible y permite más comandosAcabo de usarlo en un script con comandos SSH para evitar que el script se produzca un error.
En este caso, quiero ver si un usuario puede conectarse a un conjunto de servidores. Si la conexión es correcta, el host remoto hará eco como correcto. Si la conexión falla, SSH responderá con el error. Sin embargo, quiero que mi script salga con 0 y no con el valor del comando SSH si falla. Así que esencialmente atrapo el error SSH al ORARlo
||
con el comando nulo:
. Se ve como esto:De esa manera obtengo el resultado de SSH pero no el código de error:
fuente