Либо (лучше) используйте read -a
для чтения в массив:
#!/usr/bin/env bash
# ^^^^ arrays are a bash feature, not guaranteed in /bin/sh
Var=test_v1,"Log Processor",test_v2
IFS=, read -a Array <<<"$Var" # this updates IFS only for the duration of 'read'
for i in "${Array[@]}"; do # now loop over elements in the array read created
echo "Variables are ${i} assined"
done
Или (хуже) измените IFS
, чтобы он содержал только символы, которые вы хотите использовать для разделения полей и отключения подстановки, поэтому вы можете безопасно использовать расширение без кавычек:
Var=test_v1,"Log Processor",test_v2
IFS=, # set the comma as the only field separator
set -f # disable globbing
for i in $Var; do # perform an unquoted expansion to split on IFS
echo "Variables are ${i} assined"
done
# WARNING: This code left globbing disabled and ',' as the only field separator!
Поскольку ${Var//,/ }
заменяет запятые на пробелы, в результате все пробелы и запятые неразличимы, поэтому вы разделяете их на оба. Не делай этого; вместо этого считайте массив и перебирайте его содержимое.