我有一个脚本,它使用一个MySQL选择查询作为它的唯一参数。通常,我将该查询括在单引号中,并在查询中使用双引号,以封装作为查询本身的参数的字符串。
这有时会出现问题,通常是当查询本身必须搜索引号字符(单字符或双字符)时。我确信这可以通过正确转义单引号和双引号来解决,但这是很棘手的,因为MySQL和Linux可能使用不同的方法转义。
示例.这里有一个例子,对我来说这似乎非常困难.它需要找到带有反斜杠的单引号字符。注意,此示例不打算转义MySQL或CLI的任何字符。百分比符号在MySQL中充当通配符。
./show-results 'SELECT * FROM `table` WHERE `column` LIKE "%\'%"'
Is可以使用单引号或双引号以外的其他内容来括住shell参数?
发布于 2020-09-02 21:42:22
你没有提供样品,所以我不确定这是否对你有用。
在此使用文件:
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 "%\'\''%"'第一个反斜杠位于''内部,因此它不充当转义并导致\,第二个反斜杠位于''之外,用于转义单个'。
https://unix.stackexchange.com/questions/607589
复制相似问题