tenho essa função
rpargs () {
local i
args=()
for i in "$@"
do
test -e "$i" && args+="$(realpath --canonicalize-existing -- "$i")" || args+="$i"
done
}
E eu quero voltar args
. As únicas maneiras em que consigo pensar são printf '%s\0'
dividi-lo por meio de sinalizadores de expansão (0@)
ou usar um global como o código acima.
zsh
'sreturn
builtin só pode retornar um inteiro assinado de 32 bits como a_exit()
chamada do sistema. Embora seja melhor do que a maioria dos outros shells do tipo Bourne, isso ainda não pode retornar strings arbitrárias ou lista de strings como osrc
/es
shells. O status de retorno é mais sobre como retornar uma indicação de sucesso/falha.Aqui, alternativamente, você pode fazer com que a função pegue o nome do array para preencher como argumento, como:
Sua
printf '%s\0'
abordagem não funcionaria para elementos de matriz que contêm NULs.Em vez disso, você pode usar o
qq
sinalizador de expansão de parâmetro para citar elementos na saída ez
(para analisar aspas) eQ
(para remover aspas) na entrada como:Mas, além de ser menos legível, também é menos eficiente, pois significa bifurcar um processo e transferir a saída
myfunc
através de um tubo, além da cotação/descitação.A maneira idiomática é usar apenas o
reply
array. Se quiser, você pode usar a(P)
flag e retornar em um array cujo nome é passado para a função: