Tengo algunos problemas con la división de palabras en la expansión de variable bash. Quiero poder almacenar una lista de argumentos en una variable y ejecutarla, pero cualquier argumento de palabras múltiples citado no está evaluando cómo esperaba que lo hicieran.¿Cómo puedo pasar una lista completa de argumentos en bash manteniendo los argumentos de mulitword juntos?
Explicaré mi problema con un ejemplo. Digamos que tenía una función decho
que imprime cada parámetro de posición en su propia línea:
#!/bin/bash -u
while [ $# -gt 0 ]; do
echo $1
shift
done
Ok, si voy decho a b "c d"
me sale:
[~]$ decho a b "c d"
a
b
c d
¿Qué es lo que espero y deseo. Pero por otro lado si consigo la lista de argumentos de una variable consigo esto:
[~]$ args='a b "c d"'
[~]$ decho $args
a
b
"c
d"
que no es lo que quiero. Puedo ir:
[~]$ echo decho $args | bash
a
b
c d
Pero eso parece un poco torpe. ¿Hay una mejor manera de hacer que la expansión de $args
en decho $args
sea dividida por palabras de la manera que esperaba?
FYI, 'echo $ 1' es bastante desafortunado - que sustituye, f'rinstance, un argumento de' '* con una lista de nombres de archivo en el directorio actual. 'echo" $ 1 "' sería menos propenso a riesgos. –