De un comando obtengo algunos argumentos que quiero ofrecer al usuario con la instrucción select de bash en un script de shell. Los argumentos proporcionados por el comando pueden contener espacios y, por lo tanto, están protegidos por comillas. Aquí hay un ejemplo simplificado.
Esto funciona como se esperaba:
select opt in a b "c d"
do
echo $opt
break
done
El resultado es el esperado:
1) a
2) b
3) c d
#?
Pero con la salida del comando en una variable, no funciona como se esperaba:
opts="a b \"c d\""
select opt in $opts
do
echo $opt
break
done
Aunque $ opts contiene lo mismo que la escritura codificada en el primer ejemplo de selección, la salida es diferente:
1) a
2) b
3) "c
4) d"
#?
Entonces, no es que bash haya consumido las citas. Se guardan, pero las citas no encapsulan un argumento como lo hicieron cuando las codifiqué. Como ya escribí, obtengo los argumentos como resultado de un comando. Pueden contener espacios y, por lo tanto, ya están protegidos por comillas. ¿Cómo los consigo en una sola pieza para la declaración 'select'? No se trata de comillas simples y dobles. Con comillas simples sucede lo mismo:
1) a
2) b
3) 'c
4) d'
#?