Supongamos que tengo un programa gráfico llamado app
. Ejemplo de uso:app -t 'first tab' -t 'second tab'
abre dos 'pestañas' en ese programa.
La pregunta es:¿cómo puedo ejecutar el comando (es decir, app
) desde dentro de un bash
script si el número de argumentos puede variar?
Considere esto:
#!/bin/bash
tabs=(
'first tab'
'second tab'
)
# Open the app (starting with some tabs).
app # ... How to get `app -t 'first tab' -t 'second tab'`?
Me gustaría que la secuencia de comandos anterior tuviera un efecto equivalente a app -t 'first tab' -t 'second tab'
. ¿Cómo se puede escribir un script bash de este tipo?
Editar:tenga en cuenta que la pregunta se refiere a la composición de argumentos de línea de comandos sobre la marcha utilizando una matriz de argumentos.
Respuesta aceptada:
Dar los argumentos de una matriz es fácil, "${array[@]}"
se expande a las entradas de la matriz como palabras distintas (argumentos). Solo necesitamos agregar el -t
banderas Para hacer eso, podemos recorrer la primera matriz y construir otra matriz para la lista completa de argumentos, agregando -t
banderas a medida que avanzamos:
#!/bin/bash
tabs=("first tab" "second tab")
args=()
for t in "${tabs[@]}" ; do
args+=(-t "$t")
done
app "${args[@]}"
Usa "[email protected]"
en lugar de "${tabs[@]}"
para tomar los argumentos de la línea de comandos del script en lugar de una lista codificada.