尝试捕获并显示 curl 的输出让我抓狂。我终于找到了解决方法,但我不明白为什么需要它。
这是一个失败的脚本:
#!/bin/bash
function echo_output() {
echo $@
}
CURL_OUTPUT=$(curl -sL --head www.google.com/foobar)
echo_output "$CURL_OUTPUT"
这是一个有效的脚本:(转义回车符)
#!/bin/bash
function echo_output() {
OUT="${@//[$'\r']/\r}"
echo $OUT
}
CURL_OUTPUT=$(curl -sL --head www.google.com/foobar)
echo_output "$CURL_OUTPUT"
发生了什么?换行符和“$@”有什么特别之处?谢谢您的帮助。
答案1
我不认为$@有什么问题。
但在第一种情况下,为了将该变量作为您分配给 curl 的参数干净地输出,并且输出带有换行符,您需要在函数 echo_output() 中引用“$@”,在这种情况下,“echo”(它反过来只将其位置参数打印到标准输出中,仅此而已)将正确地拆分单词 -> 参数(参数)。正如 Dawud 提到的,在这种情况下最好使用 printf。
再次以你的情况为例:
function echo_output() {
echo "$@"
}
会做的。