Solução pura do bash, usando IFS
e read
. Observe que as strings não devem conter $''
(ou qualquer outra coisa que você use para o IFS, infelizmente $'
não funciona, mas, por exemplo, %code% ): $'6'
'
#!/bin/bash
split_by () {
string=$1
separator=$2
tmp=${string//"$separator"/$''}
IFS=$'' read -a arr <<< "$tmp"
for substr in "${arr[@]}" ; do
echo "<$substr>"
done
echo
}
split_by '1--123--23' '--'
split_by '1?*123' '?*'
Ou use o Perl:
perl -E 'say for split quotemeta shift, shift' -- "$separator" "$string"