变量扩展与curl无法正常工作

时间:2018-03-29 15:58:12

标签: shell

我在查找shell脚本中变量的扩展时遇到了一些麻烦。如果我用所需的字符串替换变量,它就可以工作。

#!/bin/zsh

KEY="$(curl -Ivs -X GET "http://admin:admin@192.168.1.1" &> >(awk '/^> Authorization/{ print $3 " " $4 }'))" 
# The string returned by the curl and awk command is Basic "YWRtaW46YWRtaW4=" without double quotes.

curl -H "Authorization: $KEY" "http://192.168.1.1/userRpm/WlanMacFilterRpm.htm?Page=1&exclusive=1" 
# This doesn't work

curl -H "Authorization: Basic YWRtaW46YWRtaW4=" "http://192.168.1.1/userRpm/WlanMacFilterRpm.htm?Page=1&exclusive=1" 
# This works 

上述两行中唯一不同的是。

  • -H "Authorization: $KEY"
  • -H "Authorization: Basic YWRtaW46YWRtaW4="

1 个答案:

答案 0 :(得分:2)

HTTP通常使用DOS样式的CR + LF线路终结器。每当您从curl解析数据时,您都必须考虑到这一点。

要检查这是否是问题,请使用bash -x yourscriptzsh -x yourscript运行脚本,以查看显示其他不可见回车符的跟踪输出:

var=$'value\C-M'   # zsh
var=$'value\r'     # bash

(遗憾的是,Dash和ash / busybox没有突出显示此问题,因此尝试使用上述shell之一)

要剥离它们,请通过tr -d '\r'管道传输数据。