$ printf '<%s>\n' "${(@ps:\t:)$(printf 'foo bar\t\tbaz')}"
<foo bar>
<>
<baz>
Ou se você quiser suprimir os elementos vazios, como na sua abordagem tempvar:
$ printf '<%s>\n' ${(ps:\t:)"$(printf 'foo bar\t\tbaz')"}
<foo bar>
<baz>
IOW, você precisa citar a substituição do comando. Caso contrário, o s:\t:
aplica-se à união (com o primeiro caractere de $IFS
) dos campos resultantes do $IFS
-split da substituição do comando.
Como alternativa, você pode definir $IFS
para a string vazia ou para um único caractere que não seja espaço em branco.
$ (IFS=; printf '<%s>\n' ${(ps:\t:)$(printf 'foo bar\t\tbaz')})
<foo bar>
<baz>