MySQL Select com função IN() com array bash

MySQL Select com função IN() com array bash

Como posso fazer isso com um array? (sem armazenar o array como variável regular)

VAR='String1 String2 String3'
SELECT * FROM db.table WHERE xy IN ( ${VAR// /, } );

exemplo que não funciona:

SELECT * FROM db.table WHERE xy IN ( ${ARRAY[@]// /, } );

Responder1

A expansão e substituição do arrayéfuncionando, mas não há espaços em sua matrizelementos. Compare com:

$ array=("one two" three four)
$ echo "${array[@]/ /, }"
one, two three four

Você está tentando unir novamente os elementos da matriz com uma vírgula e um espaço ( ,) entre eles. vou roubar cópiauma das respostas de Glenn Jackmannessa veia:

$ array=(String1 String2 String3)
$ joined=$( set -- "${array[@]}"; IFS=,; echo "$*" )

Então você pode usar:

SELECT * FROM db.table WHERE xy IN "$joined"

Como um exemplo:

$ array=("String1 String2" String3 String4)
$ joined=$( set -- "${array[@]}"; IFS=,; echo "$*" )
$ echo "$joined"
String1 String2,String3,String4

Não sei de imediato o que você precisará fazer com o SQL para citar elementos da matriz (Strings) que contêm espaços (se houver).

informação relacionada