You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在mysql -Bse命令中转义变量中的单引号?

在mysql -Bse命令中转义含单引号的变量

问题描述

执行以下bash命令:

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}";'

但在HeidiSQL中直接执行以下SQL语句可成功删除对应行:

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

需要解决的核心问题:如何在mysql -Bse命令中正确转义变量里的单引号?

可行解决方案

方案1:先转义变量再拼接命令

先将FILE_PATH中的单引号替换为MySQL支持的转义格式(两个连续单引号''),再构造执行命令:

# 转义变量中的单引号
ESCAPED_FILE_PATH="${FILE_PATH//\'/''}"
# 执行MySQL命令
mysql -u root nextcloud -Bse "DELETE FROM oc_filecache WHERE path='$ESCAPED_FILE_PATH';"

MySQL的字符串规则中,两个连续单引号会被解析为单个单引号,这样就能正确匹配含单引号的路径。

方案2:使用Bash Heredoc简化引号处理

通过Bash的Heredoc语法传递SQL语句,无需手动转义变量中的单引号,Heredoc会原样解析变量内容:

mysql -u root nextcloud <<EOF
DELETE FROM oc_filecache WHERE path="$FILE_PATH";
EOF

这种方式避免了多层引号嵌套的混乱,可读性更强,适合处理复杂字符串变量。

内容的提问来源于stack exchange,提问作者Alex Lum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 07:13:11