Shell 变量扩展与curl的预期效果不符

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

我在计算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“授权:$KEY”
  • -H“授权:基本YWRtaW46YWRtaW4=“

HTTP通常使用DOS样式的CR+LF线路终端。无论何时从
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=
。其余部分来自“降低卷曲度”命令。