Le 24/08/2021 à 15:09, Mike Jonkmans écrivait :
This seems to be the fastest:
f12 () { [[ "$1" =~ ${1//?/(.)} ]]; local arr=( "${BASH_REMATCH[@]:1}" ); }
time for ((i=1; i<=10000; i++)); do f0 682390; done
real 0m0,296s
user 0m0,296s
sys 0m0,000s
Awesome Mike, would you like to add this answer to SO?
It would be very useful there; but I don't want to be wrongly credited
for this smart implementation.
time for ((i=1; i<=10000; i++)); do f12 682390; done
real 0m0.223s
user 0m0.223s
sys 0m0.000s
Made it into a fancy utility function:
string2array() {
# Splits the string's characters into the array
# $1: The input string
# $2: The output array name
[[ "$1" =~ ${1//?/(.)} ]]
# shellcheck disable=SC2178 # shellcheck broken nameref type check
local -n arr="$2"
# shellcheck disable=SC2034 # shellcheck broken nameref usage check
arr=("${BASH_REMATCH[@]:1}")
}
--
Léa Gris