我有一个脚本,它采用 MySQL SELECT 查询作为其唯一参数。通常,我将该查询括在单引号中,并在查询中使用双引号来括起作为查询本身参数的字符串。
有时,这会出现问题,通常是当查询本身必须搜索引号字符(单引号或双引号)时。我确信可以通过正确转义单引号和双引号来解决这个问题,但这很棘手,因为 MySQL 和 Linux shell 可能使用不同的转义方法。
例子...这是一个例子,对我来说似乎非常困难......它需要找到前面有反斜杠的单引号字符。请注意,此示例无意转义 MySQL 或 CLI 的任何字符。百分号在 MySQL 中充当通配符。
./show-results 'SELECT * FROM `table` WHERE `column` LIKE "%\'%"'
是否可以使用单引号或双引号以外的其他内容来括起 shell 参数?
答案1
您没有提供示例,所以我不确定这是否适合您。
使用此处的文档:
echo "$(cat <<'EOF'
foo "x" bar 'x'
EOF
)"
当你运行这个命令时,set -x
你会发现 bash 会为你转义:
+ 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 "%\'\''%"'
第一个反斜杠在内部,''
因此它不充当转义符并导致\
第二个反斜杠在外部''
,用于转义单个'
。