如何将多行变量作为参数传递给函数

如何将多行变量作为参数传递给函数

尝试捕获并显示 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 "$@"
}

会做的。

相关内容