¿Cómo puedo hacer esto con una matriz? (sin almacenar la matriz como variable regular)
VAR='String1 String2 String3'
SELECT * FROM db.table WHERE xy IN ( ${VAR// /, } );
ejemplo que no funciona:
SELECT * FROM db.table WHERE xy IN ( ${ARRAY[@]// /, } );
Respuesta1
La expansión y el reemplazo de la matrizesfuncionando, pero no hay espacios en su matrizelementos. Comparar con:
$ array=("one two" three four)
$ echo "${array[@]/ /, }"
one, two three four
Estás intentando volver a unir los elementos de la matriz con una coma y un espacio ( ,
) entre ellos. robaré copiauna de las respuestas de glenn jackmanen esta vena:
$ array=(String1 String2 String3)
$ joined=$( set -- "${array[@]}"; IFS=,; echo "$*" )
Entonces puedes usar:
SELECT * FROM db.table WHERE xy IN "$joined"
Como ejemplo:
$ array=("String1 String2" String3 String4)
$ joined=$( set -- "${array[@]}"; IFS=,; echo "$*" )
$ echo "$joined"
String1 String2,String3,String4
No sé de antemano qué necesitará hacer con SQL para citar elementos de matriz (cadenas) que contienen espacios (si los hay).