我正在从输入文件中读取密码并使用该密码登录。 但是,如果密码具有特殊字符,则其失败。 如何使其适用于带或不带特殊字符的密码? 尝试过使用"$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)"
- 您应该始终引用变量扩展
- 使用单引号禁用变量扩展和其他特殊字符
当前代码的一些问题:
echo $line
没有正确引用,并且会在空格和其他特殊字符上中断;请使用echo "$line"
- 正如@GordonDavisson评论中所建议的那样,
printf '%sn' "$line"
实际上比echo
更安全,根据$line
的内容,可能无法正常工作
- 正如@GordonDavisson评论中所建议的那样,
admin:'$pass'
将解析为文字字符admin:$pass
传递给curl
;使用"admin:${pass}"
https://$ip:443/admin
也没有正确引用,请使用"https://${ip}:443/admin"
- 如果在脚本中使用文字密码设置
$line
,则需要单引号让 shell 忽略特殊字符;line='...,sbxy$sT_i7d6I*7'