首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shell参数可以用字符**而不是单引号和双引号括起来吗?

问shell参数可以用字符**而不是单引号和双引号括起来吗?
EN

Unix & Linux用户
提问于 2020-09-02 19:24:16
回答 1查看 290关注 0票数 2

我有一个脚本,它使用一个MySQL选择查询作为它的唯一参数。通常,我将该查询括在单引号中,并在查询中使用双引号,以封装作为查询本身的参数的字符串。

这有时会出现问题,通常是当查询本身必须搜索引号字符(单字符或双字符)时。我确信这可以通过正确转义单引号和双引号来解决,但这是很棘手的,因为MySQL和Linux可能使用不同的方法转义。

示例.这里有一个例子,对我来说这似乎非常困难.它需要找到带有反斜杠的单引号字符。注意,此示例不打算转义MySQL或CLI的任何字符。百分比符号在MySQL中充当通配符。

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

Is可以使用单引号或双引号以外的其他内容来括住shell参数?

EN

回答 1

Unix & Linux用户

发布于 2020-09-02 21:42:22

你没有提供样品,所以我不确定这是否对你有用。

在此使用文件:

代码语言:javascript
复制
echo "$(cat <<'EOF'
foo "x" bar 'x'
EOF
)"

当您使用set -x运行它时,您将看到bash将为您转义如下:

代码语言:javascript
复制
+ echo 'foo "x" bar '\''x'\'''
foo "x" bar 'x'

现在用你的样本:

代码语言:javascript
复制
./show-results "$(cat <<'EOF'
SELECT * FROM `table` WHERE `column` LIKE "%\'%"
EOF
)"

正确的逃脱技术的结果:

代码语言:javascript
复制
./show-results 'SELECT * FROM `table` WHERE `column` LIKE "%\'\''%"'

第一个反斜杠位于''内部,因此它不充当转义并导致\,第二个反斜杠位于''之外,用于转义单个'。

票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/607589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档