如何将多行variables作为parameter passing给函数

试图捕获和显示curl的输出是让我疯狂。 我终于find了一个解决方法,但我不明白为什么它是必要的。

这是一个失败的脚本:

#!/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" 

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

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

但在第一种情况下,为了干净地输出这个variables作为一个参数,你分配给具有换行符的输出的curl,在你的函数echo_output()中,你需要引用“$ @”,在这个例子中是“echo”只将位置参数打印到标准输出中,而没有其他东西)会正确地分割单词 – >参数(参数)。 Dawud提到在这种情况下最好使用printf。

再次在你的情况下:

 function echo_output() { echo "$@" } 

会做的。