savedifs=${IFS@A} savedifs=${savedifs:- unset -v IFS }
str=1,2,3 IFS=, arr=( $str ) joined=${arr[*]}
eval "$savedifs"
alternative middleline
sep=, str=1$sep2$sep3 IFS=$sep arr=( $str ) joined=${arr[*]}
( at var=assignment , quotes dont matter , excepts to bind spaced code
together
as cmd or cmd args , or array=( here element ) , use quotes around the args
, eg "$cmd" "$arg" "${argarr[@]}" ; arr=( "$var" "${vararr[@]}" )
)
to join via first of IFS , as one-string , ${arr[*]}
to join the elements as args , "${arr[@]}"
to do this via printf , two cmds are needed ( there are serval approaches )
one is cutting runaway ,
{
printf -v joined2 %s, "${arr[@]}"
joined2=${joined2%,}
}
with printf only , and to stdout
{
printf %s "$arr"
printf "$sep%s" "${arr[@]:1}"
# -- same as ( second printf )
# printf ,%s "${arr[@]:1}"
}
there is alternatively an inline way to split strings containing quotes and
backslashes
eg {
str="1" "2" "3"'
declare -a "split=( $str )"
}
greets
On Tuesday, September 17, 2024, William Park <[email protected]> wrote:
> Hi all,
>
> Is there fast way of splitting and joining of strings in the recent Bash
> versions?
>
> For splitting, I'm aware of
> old="a,b,c"
> IFS=, read -a arr <<< "$old"
>
> For joining,
> new=$(IFS=,; echo "${arr[*]}")
> or
> new=$(IFS=,; echo "$*")
>
>
>