В bash есть переменная IFS, отвечающая за разделитель полей при чтении stdin, но нет переменной OFS — для выходного разделителя полей.
Или есть? Для преобразования можно использовать переменную $*
в кавычках.
Генерим CSV (comma separated value)
#!/bin/bash
IFS=",$IFS" # добавили запятую
set 1 2 3 4 "5 6" 7 # установили параметры
echo ' $* ='$*
echo '"$*"='"$*"
Мнение эксперта
Роман Шубин
CEO & CTO, действующий девопс-инженер в «Цифровой улей»
По итогу получаем:
# $* =1 2 3 4 5 6 7
#"$*"=1,2,3,4,5 6,7
# $* =1 2 3 4 5 6 7
#"$*"=1,2,3,4,5 6,7
Обычно IFS содержит символы пробел, табуляция, перевод строки.
Если использовать "$*"
(в кавычках обязательно), то в качестве разделителя используется первый символ IFS.
Будьте внимательны, команда set устанавливает параметры командной строки текущего экземпляра bash ($1…$N
изменятся).