Condición de carga dentro de la línea de ejecución en Bash

Condición de carga dentro de la línea de ejecución en Bash

Quiero ejecutar un comando con una opción que depende de la atribución de una variable. Si la variable está configurada, cargue la opción con el valor, pero si no, no cargue esa opción. Esto es lo que tengo:

if [ -n "$variable" ]
  then command ... -option $variable
  else command ...
fi

La idea sería fusionar esto en un solo comando con la condición dentro para no tener que repetir las otras opciones del comando dos veces.

Muchas gracias por tu tiempo.

Respuesta1

Usando matrices bash:

opts=()
[ "$variable" ] && opts+=(-option "$variable")
command ... "${opts[@]}"

Debido a que esto utiliza matrices bash, funcionará incluso si $variablecontiene espacios en blanco u otros caracteres difíciles.

Cómo funciona

  • opts=()

    Esto crea una matriz vacía llamada opts.

  • [ "$variable" ] && opts+=(-option "$variable")

    Si $variableno está vacío, agregamos -optiony $variablea la matriz opts.

  • command ... "${opts[@]}"

    Esto ejecuta su comando. Si optsno está vacío, sus elementos se agregan al comando. Si optsestá vacío no se añade nada: sería como si "${opts[@]}"no estuviera allí en absoluto.

Respuesta2

Luego toma tu comando y conviértelo en una función como esta:

function command_function () {
  command ... -option $variable
}

if [ -n "$variable" ]
  then command_function ... -option $variable
  else command_function ...
fi

Para que sepas, los paréntesis en la función Bash no pasan nada.

Respuesta3

UsandoIntentosustitución (Expansión de parámetros de shell) para obtener una sintaxis concisa y aún legible:

$ echo ${variable:+-option $variable}

$ variable=yes
$ echo ${variable:+-option $variable}
-option yes

Respuesta4

La siguiente frase servirá:

[ x"$VARIABLE" = x ] && echo UNSET || echo SET

Esto prueba si la variablex"$VARIABLE"es igualX, en otras palabras si$VARIABLEesta vacio; si se cumple la prueba la primera opción (eco DESCONECTADO) se ejecuta, si la prueba esnosatisfecho se ejecuta la última opción (eco CONJUNTO). Si no deseas hacer nada en el segundo caso, puedes hacerlo

[ x"$VARIABLE" = x ] && echo UNSET || :

Esta es considerablemente más simple que las otras soluciones, permite la evaluación de la condición solo una vez y es robusta contra la aparición de caracteres extraños en VARIABLE.

información relacionada