Shell Curl:返回比预期更奇怪的输出,但为什么?

Shell Curl:返回比预期更奇怪的输出,但为什么?,shell,curl,Shell,Curl,我使用curl检查我是否可以在我的代理服务器上访问特定的文档。 如果选中代理是否为负载平衡器的成员,则会对此文件进行检查 例如: [root@PRX scripts]# curl http://`hostname`:8080/proxy/keepalive?file=/workspace/temp/1.txt ppp [root@PRX scripts]# 该输出是预期的 如果我尝试比较此输出,则测试为false: #!/bin/bash tmp=$(curl http://$(hostna

我使用curl检查我是否可以在我的代理服务器上访问特定的文档。 如果选中代理是否为负载平衡器的成员,则会对此文件进行检查

例如:

[root@PRX scripts]# curl http://`hostname`:8080/proxy/keepalive?file=/workspace/temp/1.txt
ppp
[root@PRX scripts]# 
该输出是预期的

如果我尝试比较此输出,则测试为false:

#!/bin/bash
tmp=$(curl http://$(hostname):8080/proxy/keepalive?file=/workspace/temp/1.txt)
echo $tmp
if [ "$tmp" = "ppp" ]; then
    echo "Match"
else
    echo "No match"
fi
我使用调试模式运行脚本(
bash-x
):

我还尝试将
curl
的输出写入
/tmp/tmp
中的临时文件,然后写入
cat
文件,但得到了相同的响应。您可以在调试输出中看到
$tmp
变量,该变量保存
curl
的输出

tmp=$'ppp\r'
而不是

tmp='ppp'
有人能解释一下这个问题并解释一下这种行为吗?
提前感谢,

这个
\r
是一个回车符,因为web服务器返回DOS行终止符

您可以使用
tr

TMP=$(curl "http://$HOSTNAME:8080/proxy/keepalive?file=/workspace/temp/1.txt" | tr -d '\r')
if [[ $TMP = ppp ]]
then 
  echo "It's true"
fi

您将
-o tmp
添加到变量赋值
curl
命令中。这告诉curl将输出发送到文件,而不是stdout。命令替换捕获标准输出内容。如果你需要/想要两者,你想使用
tee
。实际上这只是另一次尝试,当不使用“-o”开关时,我会得到完全相同的响应。你确定服务器会给你一致的结果吗?因为如果curl命令向stdout发送字符串,那么命令替换将捕获它。
TMP=$(curl "http://$HOSTNAME:8080/proxy/keepalive?file=/workspace/temp/1.txt" | tr -d '\r')
if [[ $TMP = ppp ]]
then 
  echo "It's true"
fi