Pergunta

Estou tentando devolver uma matriz de uma função. O código abaixo não funciona.

function testArray
   echo 1 2 3 4
end

set r (testArray)

echo $r[2]
# error

Qual é a maneira correta de retornar vários valores de uma função usando concha de peixe?

Foi útil?

Solução 2

Conforme explicado por ridiculous_fish Você pode usar o mecanismo de divisão de linha nativo.

resultado de uma substituição de comando se torna uma lista dividindo -se em novas linhas ($IFS)

Então

  1. Liste um item por linha;
  2. Em seguida, capture isso em uma substituição de comando.

Listagem

function __list_public_keys
    for key in ~/.ssh/*.pub
        echo $key
    end
end
resultado
$ __list_public_keys
/home/ed8/.ssh/id_rsa.blabla.pub
/home/ed8/.ssh/id_rsa.pub
/home/ed8/.ssh/id_rsa.test.pub

Captura

function __add_keys
    set keys (__list_public_keys)

    echo "[" $keys "]"
end
resultado
$ __add_keys
[/home/ed8/.ssh/id_rsa.blabla.pub] [/home/ed8/.ssh/id_rsa.pub] [/home/ed8/.ssh/id_rsa.test.pub]

Outras dicas

O resultado de uma substituição de comando se torna uma lista dividindo -se em novas linhas (tecnicamente o conteúdo de $IFS, mas modificar o IFS é desencorajado).

Então você pode substituir os espaços por novas linhas, talvez com tr:

function testArray
   echo 1 2 3 4
end
set r (testArray | tr ' ' \n)
echo $r[2]

Ou modifique a função para apenas produzir linhas de novo diretamente:

function testArray
   echo \n1\n2\n3\n4
end
set r (testArray)
echo $r[2]

https://github.com/fish-hell/fish-hell/issues/445 Rastreia melhores mecanismos para gerar listas.

Eu não acho que isso ainda seja possível. Compare isso questão no github.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top