shell функция преобразования строки в массив (bash, zsh)
После написания этой ф-ции я задумался: "Зачем на нужна?") Поскольку массив из нее вернуть не выйдет - только список строк. И при этом уже есть 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