Вставьте строки/слова в переменную из файла и присоедините разделитель вместо пробела/ов

В спецификации POSIX в разделе Расширение параметров говорится...

The format for parameter expansion is as follows:

${expression}

where expression consists of all characters until the matching '}'.

snip

The simplest form for parameter expansion is:

${parameter}

Затем в разделе двойное -цитирование ...

Enclosing characters in double-quotes ( "" ) shall preserve the literal value of all characters within the double-quotes, with the exception of the characters backquote,, and, as follows:

$ The dollar-sign shall retain its special meaning introducing parameter expansion (see Parameter Expansion), a form of command substitution (see Command Substitution), and arithmetic expansion (see Arithmetic Expansion).

Итак, да.

1
27.08.2019, 20:01
3 ответа

Сpaste:

list=$(paste -sd, < machines.txt)
3
27.01.2020, 23:17

Команда sedоценивает строку -по строке -по умолчанию. В результате ваша команда не заменяет новую строку. Вы можете подтвердить это, запустив:

echo "$LIST"

, что покажет вам, что вы на самом деле не выполняли никаких операций с исходным содержимым файла.

Поскольку вы заменяете только один символ, я бы рекомендовал инструмент trв качестве альтернативы sed. Результирующая команда будет выглядеть примерно так:

LIST=$(tr '\n' ',' < machines.txt) 

В основном строка означает, что мы хотим заменить новые строки \nзапятой,

Если в конце есть запятая, вы также можете добавить команду sed, чтобы удалить последнюю запятую.

LIST=$(tr '\n' ',' < machines.txt | sed 's/,$//')
1
27.01.2020, 23:17

Мой подход:

$ LIST=$(echo $(<machines.txt) | sed 's/ /,/g')
$ echo "$LIST"
$ Node23,Node34,Node12,Node95,Node23
0
27.01.2020, 23:17

Теги

Похожие вопросы