配列でこれを行うにはどうすればよいですか? (配列を通常の変数として保存せずに)
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 に何を行う必要があるかすぐにはわかりません。