使用Grep提取含特殊字符的WordPress配置项时异常
解决WordPress wp-config.php配置读取时特殊字符带引号的问题
你的问题出在通过grep+cut提取配置值的方式不够健壮,遇到含特殊字符(如$)的字段时,会错误地保留单引号,导致后续uapi命令执行失败。
修改后的脚本
用sed精准匹配wp-config.php中的define语句,直接捕获引号内的配置值,避免引入多余引号:
wpconfigs=($(find . -name "wp-config.php")) for i in "${wpconfigs[@]}"; do # 提取数据库名称、用户名、密码,自动去除单引号 wpdb=$(sed -n "s/^\s*define\s*('DB_NAME',\s*'\([^']*\)');/\1/p" "$i") wpuser=$(sed -n "s/^\s*define\s*('DB_USER',\s*'\([^']*\)');/\1/p" "$i") wppass=$(sed -n "s/^\s*define\s*('DB_PASS',\s*'\([^']*\)');/\1/p" "$i") allpriviledges="ALL PRIVILEGES" # 执行uapi命令,双引号包裹变量确保特殊字符正确传递 uapi --output=jsonpretty --user="$cpuser" Mysql create_user name="${wpuser}" password="${wppass}" done
关键改进说明
- 精准匹配配置行:
sed的正则表达式专门匹配define('KEY', 'VALUE');格式的行,忽略注释行或其他无关内容。 - 正确捕获值:
\([^']*\)部分会捕获单引号之间的所有内容(包括特殊字符),且不包含引号本身。 - 兼容格式差异:
\s*用来匹配行内任意空格,适配不同排版的wp-config.php文件。 - 安全传递变量:执行
uapi时用双引号包裹变量,确保$等特殊字符不会被bash当作元字符解析。
内容的提问来源于stack exchange,提问作者lukederbyshire
相关产品推荐
相关产品推荐

