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

rig*_*rsa 5 linux bash

试图捕获和显示 curl 的输出让我发疯。我终于找到了一种解决方法,但我不明白为什么需要它。

这是一个失败的脚本:

#!/bin/bash
function echo_output() {
    echo $@
}

CURL_OUTPUT=$(curl -sL --head www.google.com/foobar)
echo_output "$CURL_OUTPUT"
Run Code Online (Sandbox Code Playgroud)

这是一个有效的脚本:(转义回车)

#!/bin/bash
function echo_output() {
    OUT="${@//[$'\r']/\r}"
    echo $OUT
}

CURL_OUTPUT=$(curl -sL --head www.google.com/foobar)
echo_output "$CURL_OUTPUT"
Run Code Online (Sandbox Code Playgroud)

是什么赋予了?换行符和“$@”有什么特别之处?谢谢您的帮助。

Dan*_*ner 3

我不认为$@有什么问题。

但在第一种情况下,为了干净地输出该变量作为参数,您分配给带有换行符的输出的curl,在函数echo_output()中,您需要引用“$@”,在本例中为“echo”(反过来仅将其位置参数打印到标准输出中,仅此而已)将正确分割单词 ->arguments(parameters) 。正如 Dawud 提到的,在这种情况下最好使用 printf。

再次针对您的情况:

function echo_output() {
echo "$@"
}
Run Code Online (Sandbox Code Playgroud)

会做的。