[Ситуация]
Пример 1:
a="$(echo $'\n\n\n\n\n')"; echo ${#a};
0
Пример 2:
a="$(echo $'\n\n\n\n\n_')"; echo ${#a};
6
[Проблема/Вопрос]
Как переписать в «Примере 1» присваивание переменной a так, чтобы были сохранены все пустые строки в конце?
Желательно, наиболее простое решение.
Естественно, имеется в виду, что нужно присвоить не заранее известное значение, а вывод вызова какой-л. команды, причём присваивание д. корректно работать всегда (для любого вызова любой команды). Пример приведён намеренно упрощённый.
[Решение]
Помогли на др. сайте. На тек. момент наиболее подходящим из найденных (по моим критериям) явл. решение (знаете лучше - допишите):
to()
{
local to=${1};
IFS= read -rd '' ${to};
printf -v ${to} "${!to%$'\n'}";
};
…
# a="$(echo $'\n\n\n\n\n')"; # Неправильное присваивание
to a < <(echo $'\n\n\n\n\n'); # Правильное присваивание
…
А для общего случая:
to()
{
local to=${1};
IFS= read -rd '' ${to};
printf -v ${to} "${!to%$'\n'}";
};
…
# aVariable="$(some_command arg_1 … arg_n)"; # Неправильно
to aVariable < <(some_command arg_1 … arg_n); # Правильно
Функция to зд. - только для удобства и сокращения текста; в прот. случае, м. было бы каждый раз писать соотв. вызов read.