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 $variable
contiene 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
$variable
no está vacío, agregamos-option
y$variable
a la matrizopts
.command ... "${opts[@]}"
Esto ejecuta su comando. Si
opts
no está vacío, sus elementos se agregan al comando. Siopts
está 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.