使用密码登录的 curl 请求在 bash 脚本中具有特殊字符?



我正在从输入文件中读取密码并使用该密码登录。 但是,如果密码具有特殊字符,则其失败。 如何使其适用于带或不带特殊字符的密码? 尝试过使用"$pass",但看起来不起作用。

ip="$(echo $line | awk -F ',' '{print $1}')"
pass="$(echo $line | awk -F ',' '{print $3}')"

output_json="$(curl -u admin:'$pass'  -X GET -H "Content-Type:application/json" https://$ip:443/admin -k)" 

  1. 您应该始终引用变量扩展
  2. 使用单引号禁用变量扩展和其他特殊字符

当前代码的一些问题:

  • echo $line没有正确引用,并且会在空格和其他特殊字符上中断;请使用echo "$line"
    • 正如@GordonDavisson评论中所建议的那样,printf '%sn' "$line"实际上比echo更安全,根据$line的内容,可能无法正常工作
  • admin:'$pass'将解析为文字字符admin:$pass传递给curl;使用"admin:${pass}"
  • https://$ip:443/admin也没有正确引用,请使用"https://${ip}:443/admin"
  • 如果在脚本中使用文字密码设置$line,则需要单引号让 shell 忽略特殊字符;line='...,sbxy$sT_i7d6I*7'

最新更新