Shell脚本中如何解析含双美元符的变量并用于curl命令?
解决Shell脚本中curl传递含$符号变量的问题
问题根源
- 变量赋值错误:原代码用双引号定义
auth变量时,Shell会把$zY59kBuIpKeG4q1526phJ9识别为变量名(该变量不存在会被替换为空),导致auth值丢失部分内容。 - curl变量未展开:原curl请求的Header用单引号包裹,Shell不会解析单引号内的
$auth变量,会直接把$auth作为字符串发送,而非变量实际值。
修正方案
1. 正确定义含$符号的变量
用单引号包裹字符串,避免Shell解析内部的$符号:
local auth='$3xLxLBcsKv$zY59kBuIpKeG4q1526phJ9'
如果必须使用双引号(比如字符串内有其他需要展开的内容),需对$符号转义:
local auth="$3xLxLBcsKv\$zY59kBuIpKeG4q1526phJ9"
2. 修正curl命令的Header写法
将Header部分的单引号改为双引号,让Shell正常展开$auth变量:
curl --connect-timeout 2 -H "Extender-Auth: $auth" https://192.168.5.1/1/
也可采用单引号+双引号的混合写法(适合Header包含其他特殊字符的场景):
curl --connect-timeout 2 -H 'Extender-Auth: '"$auth" https://192.168.5.1/1/
完整示例代码
#!/bin/bash # 正确定义含$符号的变量 local auth='$3xLxLBcsKv$zY59kBuIpKeG4q1526phJ9' # 执行curl请求 curl --connect-timeout 2 -H "Extender-Auth: $auth" https://192.168.5.1/1/
内容的提问来源于stack exchange,提问作者Ray
相关产品推荐
相关产品推荐

