Работа в BASH GNU bash, версия 4.2.25(1) -релиз (x86_64-pc-linux-gnu) под Ubuntu 12.04LTS
У меня проблема с записью содержимого массива в строку, разделенную новыми строками.
Я нашел эту запись (Как мне преобразовать переменную массива bash в строку, разделенную символом новой строки?), Что дало мне большую надежду, что решение было готово. Это отлично работает в командной строке.
$ System=('s1' 's2' 's3' 's4 4 4')
$ var=$( IFS=$'\n'; echo "${System[*]}" )
$ echo -e $var
s1
s2
s3
s4 4 4
Но когда я дословно включаю его в функцию внутри библиотеки, он делает именно то, что делал мой собственный массив, и печатает ...
s1 s2 s3 s4 4 4
В командной строке piping to od подтверждает использование разделителя '\n'
$ echo -e $var | od -ab
0000000 s 1 nl s 2 nl s 3 nl s 4 sp 4 sp 4 nl
163 061 012 163 062 012 163 063 012 163 064 040 064 040 064 012
s 1 \n s 2 \n s 3 \n s 4 4 4 \n
0000020
Внутри функции точно такие же операторы вставляют пробел в качестве разделителя '\s'
0000000 s 1 sp s 2 sp s 3 sp s 4 sp 4 sp 4 nl
163 061 040 163 062 040 163 063 040 163 064 040 064 040 064 012
s 1 s 2 s 3 s 4 4 4 \n
0000020
Это поставило меня в тупик. Как я могу принудительно использовать разделитель '\n' внутри функции?
ДОПОЛНЕНИЕ К ВОПРОСУ для иллюстрации предложенного решения, которое я использовал. В командной строке цитаты не имеют значения (что вводит меня в заблуждение!); либо echo -e $ var, либо echo -e "$ var" выдают правильный вывод, как показано ниже.
s1
s2
s3
s4 4 4
В сценарии кавычки имеют значение! Без кавычек разделитель - пробел (sp/040)
echo -e $var | od -abc
0000000 s 1 sp s 2 sp s 3 sp s 4 sp 4 sp 4 nl
163 061 040 163 062 040 163 063 040 163 064 040 064 040 064 012
s 1 s 2 s 3 s 4 4 4 \n
0000020
Внутри скрипта с кавычками разделителем является символ новой строки (nl, 012,\n).
echo -e "$var" | od -abc
0000000 s 1 nl s 2 nl s 3 nl s 4 sp 4 sp 4 nl
163 061 012 163 062 012 163 063 012 163 064 040 064 040 064 012
s 1 \n s 2 \n s 3 \n s 4 4 4 \n
0000020
Спасибо за этот опыт обучения и есть ли простое объяснение того, почему командная строка и скрипт ведут себя по-разному?