Shell 变量扩展与curl的预期效果不符
我在计算shell脚本中变量的扩展时遇到了一些问题。如果我用所需的字符串替换变量,它就会工作Shell 变量扩展与curl的预期效果不符,shell,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 "YWRtaW46
#!/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“授权:$KEY”
-H“授权:基本YWRtaW46YWRtaW4=“
curl
解析数据,都必须对此进行说明
要检查这是否是问题所在,请使用bash-xyourscript
或zsh-xyourscript
运行脚本,以查看显示不可见回车的跟踪输出:
var=$'value\C-M' # zsh
var=$'value\r' # bash
(不幸的是,Dash和ash/busybox没有突出显示此问题,因此请尝试使用上述外壳之一)
要剥离它们,请通过管道将数据传输到
tr-d'\r'
似乎未设置$KEY
。作业完成后,您是否回显了$KEY
,以查看其内容?@codeforester是的,我回显了。在获取密钥后添加echo$KEY,echo/filt.sh Basic YWRtaW46YWRtaW4=然后,这就是问题所在,对吗?为什么您需要通过&>
向awk发送curl命令的stderr?@codeforester-Only-stderr-of-curl包含我想要的头,所以为了摆脱stdout,我使用&>
将它们都导入管道,然后解析curl的输出(stdout和stderr)并适当地打印它。然后它就绑定到键(我希望)。然后,我需要使用该键作为标题的一部分来发出另一个卷曲请求。我想我现在明白你的意思了。echo的输出仅为Basic YWRtaW46YWRtaW4=
。其余部分来自“降低卷曲度”命令。