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.