Создайте входной аргумент для функции путем объединения строк - PullRequest
0 голосов
/ 21 октября 2019

У меня есть простая функция, которая окрашивает входной аргумент.

color_text_red()
{
    echo -e "\033[0;91m$1\033[0m"
}

Теперь у меня есть 2 переменные START_COUNT и STOP_COUNT, которые имеют некоторое значение.

START_COUNT="1"
STOP_COUNT="2"

Я бы хотелпостроить строку [1, 2], где 1, 2 раскрашен. Итак, я сделал это:

out_res="${START_COUNT}, ${STOP_COUNT}"
echo "[$(color_text_red $out_res)]"

К сожалению, это выводит только [1,].

Почему $STOP_COUNT отсутствует?

1 Ответ

1 голос
/ 21 октября 2019

Замечание:

f() {
  echo "First argument: $1"
  echo "Second argument: $2"
}
var="a b"
f $var

Будет выведено:

First argument: a
Second argument: b

Переменные без кавычек разделяются с помощью пробельных символов (табуляции, новых строк и пробелов) и затем передаются в функцию (чтоесть, если переменная IFS является значением по умолчанию или не установлена). Таким образом, если переменная имеет пробелы, она будет разделена. Вот почему во всем стековом потоке рекомендуется заключать в кавычки ваши переменные.

Вы должны заключать в кавычки свои расширения переменных, если хотите передать в функцию только один аргумент:

out_res="${START_COUNT}, ${STOP_COUNT}"
echo "[$(color_text_red "$out_res")]"

Правилоthumb: всегда набирайте " спереди и после $ расширений, напр. "$var" или "$(echo 1)" или "${var## }".

Дополнительная информация: ручное расщепление слов bash , упорядоченное расщепление слов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...