提问人:Alex Lum 提问时间:3/22/2023 更新时间:3/23/2023 访问量:101
Bash 命令 mysql :从变量中转义单引号
Bash command mysql : escape single quote from variable
问:
此命令
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 从变量中转义单引号?谢谢。
答:
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
评论