Использование IFS с эхом

Почему это:

arr=(1 2 4 8 16)
IFS=,
echo "${arr[*]}"

распечатать 1,2,4,8,16 (это то, что я хочу), но это не так:

arr=(1 2 4 8 16)
IFS=, echo "${arr[*]}"

?

Я хотел бы иметь временный IFS без необходимости устанавливать его, а затем сбрасывать/сбрасывать его.


person IpsRich    schedule 23.08.2019    source источник
comment
IFS=, command eval 'echo "${arr[*]}"' или (IFS=,; echo "${arr[*]}"). Подробнее о первом здесь, второй только создается подоболочка для определения IFS на время ее действия   -  person Aaron    schedule 23.08.2019
comment
Порядок событий: расширение массива происходит до запуска echo (с его модифицированной версией IFS). Вам нужно изменить IFS для shell (как в первом примере), а не для echo (который игнорирует унаследованное значение IFS).   -  person chepner    schedule 23.08.2019
comment
Спасибо всем. Порядок событий — вот что заставило меня щелкнуть. И спасибо за дубликаты, @Cyrus: ты явно лучше меня ищешь!   -  person IpsRich    schedule 23.08.2019