В спецификации 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).
Итак, да.
Команда sed
оценивает строку -по строке -по умолчанию. В результате ваша команда не заменяет новую строку. Вы можете подтвердить это, запустив:
echo "$LIST"
, что покажет вам, что вы на самом деле не выполняли никаких операций с исходным содержимым файла.
Поскольку вы заменяете только один символ, я бы рекомендовал инструмент tr
в качестве альтернативы sed
. Результирующая команда будет выглядеть примерно так:
LIST=$(tr '\n' ',' < machines.txt)
В основном строка означает, что мы хотим заменить новые строки \n
запятой,
Если в конце есть запятая, вы также можете добавить команду sed
, чтобы удалить последнюю запятую.
LIST=$(tr '\n' ',' < machines.txt | sed 's/,$//')
Мой подход:
$ LIST=$(echo $(<machines.txt) | sed 's/ /,/g')
$ echo "$LIST"
$ Node23,Node34,Node12,Node95,Node23