我在查找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="
答案 0 :(得分:2)
HTTP通常使用DOS样式的CR + LF线路终结器。每当您从curl
解析数据时,您都必须考虑到这一点。
要检查这是否是问题,请使用bash -x yourscript
或zsh -x yourscript
运行脚本,以查看显示其他不可见回车符的跟踪输出:
var=$'value\C-M' # zsh
var=$'value\r' # bash
(遗憾的是,Dash和ash / busybox没有突出显示此问题,因此尝试使用上述shell之一)
要剥离它们,请通过tr -d '\r'
管道传输数据。