shell функция преобразования строки в массив (bash, zsh)

Категория: Linux

После написания этой ф-ции я задумался: "Зачем на нужна?") Поскольку массив из нее вернуть не выйдет - только список строк. И при этом уже есть tr. В общем ф-ция больше сгодится для общего развития - как пример конвертации строки в массив для bash и zsh интерпретаторов.

Тело:

function explode { # bash & zsh
  read str  # читаем входные данные в переменную $string

  # получить входной аргумент - разделитель
  local IFS="$1" arr
  
  # определяем интерпретатор
  shell_name=$(ps -ef | grep $$ | awk '{print $8}' | grep -Po '[a-z]+' | sed -n 2p)
  
  # Convert string to array
  if [[ $shell_name == 'bash' ]]; then
    read -a arr <<< "$str"
  else
    arr=(${=str})
  fi

  # До этого момента ф-ция полезна, т.к. создает именно массив...
  
  # Опять же как и tr возвращает строки, но массив - увы
  for el in "${arr[@]}"; do
    echo "$el"
  done
}

Пример использования:

str='one; two words;three'

#echo "$str" | tr ";" "\n" | while read item; do
echo "$str" | explode ';' | while read item; do
  echo $item " = ?"
done

#explode, #split, #bash, #zsh, #array

категория: Linux