シェルパラメータを一重引用符と二重引用符以外の文字で囲むことはできますか?

シェルパラメータを一重引用符と二重引用符以外の文字で囲むことはできますか?

MySQL SELECTクエリを唯一のパラメータとして使用するスクリプトがあります。通常、クエリを一重引用符で囲み、クエリ内の二重引用符を使用してクエリ自体のパラメータである文字列を囲みます。

時にはこれが問題を引き起こす可能性があります。通常、クエリ自体から引用符文字(一重引用符または二重引用符)を取得する必要がある場合に発生します。単一引用符と二重引用符を正しくエスケープすることでこの問題を解決できると確信していますが、MySQLとLinuxシェルは異なるエスケープ方法を使用できるため、これは面倒です。


はい...以下は私にとって非常に難しいように見える例です。バックスラッシュが前にある一重引用符文字を見つける必要があります。この例は、MySQLまたはCLIから文字をエスケープするためのものではありません。パーセント記号はMySQLのワイルドカード文字として機能します。

./show-results 'SELECT * FROM `table` WHERE `column` LIKE "%\'%"'


シェルパラメータを囲むために一重引用符や二重引用符以外のものを使用できますか?

ベストアンサー1

例を提供していないので、これがうまくいくかどうかはわかりません。

ここでドキュメントを使用してください。

echo "$(cat <<'EOF'
foo "x" bar 'x'
EOF
)"

このコマンドを実行すると、set -xbashがこのコマンドをエスケープすることがわかります。

+ echo 'foo "x" bar '\''x'\'''
foo "x" bar 'x'

今サンプルを使用して:

./show-results "$(cat <<'EOF'
SELECT * FROM `table` WHERE `column` LIKE "%\'%"
EOF
)"

正しいエスケープパラメータを生成します。

./show-results 'SELECT * FROM `table` WHERE `column` LIKE "%\'\''%"'

最初のバックスラッシュは内部な''のでエスケープ文字として機能しません。2番目のバック\スラッシュは''単一をエスケープするために使用される外部です'

おすすめ記事