MySQL 関数 IN() と bash 配列を使用した選択

MySQL 関数 IN() と bash 配列を使用した選択

配列でこれを行うにはどうすればよいですか? (配列を通常の変数として保存せずに)

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

動作しない例:

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

答え1

配列の拡張と置換動作していますが、配列にスペースがありません要素。 と比べて:

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

配列要素をカンマとスペース(,)で再結合しようとしています。コピーを盗みますグレン・ジャックマンの答えの一つ同様に:

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

次に、以下を使用できます。

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

例:

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

スペース (ある場合) を含む配列要素 (文字列) を引用符で囲むには、SQL に何を行う必要があるかすぐにはわかりません。

関連情報