Я пытаюсь создать функцию string_split, совместимую с #!/bin/sh, которая имеет синтаксис команды, аналогичный команде чтения, чтобы вы могли передать строку, которую хотите разделить, и переменные, которые вы хотите также назначить строкам.
Это функция, которую я придумал, но я не могу понять, как сделать новые значения доступными вне функции, как это может сделать команда чтения.
#!/бин/ш
split_str() {
input_original=$1
ввод=$1
input_delimiter=$2
input=$(echo "$input" | sed -e "s/$input_delimiter//g")
установить -- "$input_original" "$input_delimiter" $input
}
Желаемое использование команды будет выглядеть так:
split_str "Привет, мир" " " слово1 слово2
эхо "$ слово1"
# Вывод: привет
эхо "$слово2"
# Выход: мир
Решение
Используя приведенный ниже ответ bac0ns, я смог получить это решение, которое работает с любым количеством переданных выходных параметров. Спасибо за помощь @bac0n
#!/бин/ш
split_str() {
ввод=$1
input_delimiter=$2
# Изолировать выходные параметры
output_params=$(echo "${@}" | sed -e "s/$input $input_delimiter//g")
# Добавьте дополнительный аргумент переменной, чтобы поймать любое переполнение.
# Это предотвращает добавление каких-либо дополнительных частей подстроки к
# переданные параметры.
output_params="переполнение $output_params"
# Разделить строку, прочитав значения с помощью read
IFS="$input_delimiter" читать -r $output_params << EOF
1 доллар
EOF
}