OFS / IFS и $ для генерации CSV

В Bash нет переменной OFS для выходного разделителя полей, но с помощью переменной $* и настройки IFS можно управлять разделителями и генерировать CSV.


В 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

Обычно IFS содержит символы пробел, табуляция, перевод строки.

Если использовать "$*" (в кавычках обязательно), то в качестве разделителя используется первый символ IFS.

Будьте внимательны, команда set устанавливает параметры командной строки текущего экземпляра bash ($1…$N изменятся).

Комментарии