Încerc să creez o funcție string_split compatibilă cu #!/bin/sh, care are o sintaxă de comandă similară cu comanda de citire, astfel încât să puteți trece șirul pe care doriți să îl împărțiți și variabilele pe care doriți să le atribuiți șirurile.
Aceasta este funcția cu care am venit, dar nu îmi pot da seama cum să fac noile valori disponibile în afara funcției, așa cum poate face comanda citire.
#!/bin/sh
split_str() {
input_original=$1
intrare=$1
input_delimiter=2$
input=$(echo "$input" | sed -e "s/$input_delimiter/ /g")
set -- "$input_original" "$input_delimiter" $input
}
Utilizarea dorită a comenzii ar arăta astfel:
split_str „Bună lume” „ „ cuvânt1 cuvânt2
ecou „$cuvânt1”
# Ieșire: Bună
ecou „$cuvânt2”
# Ieșire: Lumea
Soluţie
Folosind răspunsul bac0ns de mai jos, am reușit să obțin această soluție care funcționează cu orice număr de parametri de ieșire trecuți. Multumesc pentru ajutor @bac0n
#!/bin/sh
split_str() {
intrare=$1
input_delimiter=2$
# Izolați parametrii de ieșire
output_params=$(echo "${@}" | sed -e "s/$input $input_delimiter//g")
# Adăugați un argument variabil suplimentar pentru a prinde orice depășire.
# Acest lucru împiedică adăugarea oricăror părți suplimentare ale șirului secundar la
# parametri trecuți.
output_params="$output_params depășire"
# Împărțiți șirul citind valorile cu read
IFS="$input_delimiter" citește -r $output_params << EOF
$1
EOF
}