Bash脚本单引号冗余转义问题:命令执行结果不符合预期
问题原因及修正方案
核心问题点
- 选项与值的空格错误:脚本里写的
--query =,bash会把--query、=、后续内容当成三个独立参数,正确写法应该是--query=(无空格)或者--query "...",这样才能让--query和对应值被识别为一个完整选项。 - 引号转义逻辑混乱:脚本里用了HTML转义符
",bash完全不识别这个符号,再加上嵌套引号的处理错误,导致最终命令出现大量多余的转义单引号和错误的引号包裹。 - 变量引用的潜在隐患:
'$userId'放在单引号中时,bash不会解析变量(这次传纯数字没出问题,但如果变量包含空格就会直接失效),正确的变量引用应该用双引号包裹。
修正后的脚本
#!/usr/bin/env bash userId="$1" set -x function runQuery { # 用双引号直接包裹查询语句,变量放在双引号内会被正确解析 output=$(sf data query --query="SELECT Id FROM User WHERE Id = '$userId'") echo "$output" } runQuery
验证执行结果
运行sh test.sh 005后,实际执行的命令会和你期望的一致:sf data query --query="SELECT Id FROM User WHERE Id = '005'"
内容的提问来源于stack exchange,提问作者javanoob
相关产品推荐
相关产品推荐

