Bash 命令 mysql :从变量中转义单引号

Bash command mysql : escape single quote from variable

提问人:Alex Lum 提问时间:3/22/2023 更新时间:3/23/2023 访问量:101

问:

此命令

echo "mysql -u root nextcloud -Bse 'DELETE FROM oc_filecache WHERE path=\""${FILE_PATH}"\";'"

将显示

mysql -u root nextcloud -Bse 'DELETE FROM oc_filecache WHERE path="files_encryption/keys/files/xxx/xxxx/xxx L'AME/2xxxx/OC_DEFAULT_MODULE/master_x626.shareKey";'

路径中只有一个引号。当我执行命令时,这不起作用。当脚本执行此命令时

mysql -u root nextcloud -Bse 'DELETE FROM oc_filecache WHERE path="${FILE_PATH}";'

它也不起作用。行不会被删除。 从HeidySQL中,此命令起作用,删除了行。

DELETE FROM oc_filecache WHERE path="files_encryption/keys/files/xxx/xxxx/xxx L'AME/2xxxx/OC_DEFAULT_MODULE/master_x626.shareKey";

我应该怎么做才能通过 mysql -Bse 从变量中转义单引号?谢谢。

mysql bash 变量 转义

评论


答:

0赞 SelVazi 3/22/2023 #1

试试这个:

mysql -u root nextcloud -Bse 'DELETE FROM oc_filecache WHERE path="files_encryption/keys/files/xxx/xxxx/xxx L'\''AME/2xxxx/OC_DEFAULT_MODULE/master_x626.shareKey";'

第一个关闭命令,从整个查询中转义单引号,最后一个 ' 连接命令的其余部分。'\'

评论

0赞 Alex Lum 3/22/2023
我不能。path 是一个变量。例如,我在这里指出了变量的值。
0赞 Alex Lum 3/22/2023
我已经测试过了,但这不起作用,引用没有转义
0赞 SelVazi 3/23/2023
在我的语言环境中它工作正常,你能分享你遇到的错误吗?也许您也可以通过简单的选择进行测试
0赞 Alex Lum 3/23/2023
[root@xxx ~]# mysql -u root nextcloud -Bse 'DELETE FROM oc_filecache WHERE path=“files_encryption/keys/files/XXXX/XXXX/XX_INTERFACE L\'AME/XXX-5110-01.pdf/OC_DEFAULT_MODULE/master_7c357626.shareKey”;' > 这就像缺少一个引号,bash 正在等待。
1赞 Ed Morton 3/23/2023 #2

您的问题不在于变量中存储的字符串中的单引号,而是您对包含该变量的整个字符串进行了单引号,因此 shell 无法扩展它。而不是:

mysql ... 'DELETE FROM oc_filecache WHERE path="${FILE_PATH}";'

尝试:

mysql ... "DELETE FROM oc_filecache WHERE path=\"${FILE_PATH}\";"

或类似,如果这不是您所需要的全部,请尝试其他不在单引号分隔的字符串内的东西。$FILE_PATH