Назад | Перейти на главную страницу

Как передать многострочную переменную в качестве параметра функции

Попытка захватить и отобразить результат 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"

Что дает? Что особенного в символах новой строки и «$ @»? Спасибо за помощь.

Я не думаю, что с $ @ что-то не так.

Но в первом случае, чтобы чисто вывести эту переменную в качестве параметра, который вы назначили для curl с выводом, имеющим символы новой строки, в вашей функции echo_output () вам нужно заключить в кавычки «$ @», в данном случае «echo» (что, в свою очередь, только вывод своих позиционных аргументов в стандартный вывод и ничего более) правильно разделит слова -> аргументы (параметры). Как сказал Давуд, в этом случае лучше использовать printf.

Опять же в вашем случае:

function echo_output() {
echo "$@"
}

сделаю это.