Comment retourner un tableau d'une fonction avec une coquille de poisson

StackOverflow https://stackoverflow.com/questions/19835108

  •  25-07-2022
  •  | 
  •  

Question

J'essaie de retourner un tableau d'une fonction. Le code ci-dessous ne fonctionne pas.

function testArray
   echo 1 2 3 4
end

set r (testArray)

echo $r[2]
# error

Quelle est la bonne façon de renvoyer plusieurs valeurs d'une fonction à l'aide de la coquille de poisson?

Était-ce utile?

La solution 2

Comme expliqué par ridicule_fish Vous pouvez utiliser un mécanisme de dépliant natif.

Le résultat d'une substitution de commande devient une liste en se séparant sur Newlines ($IFS)

Alors

  1. Énumérez un élément par ligne;
  2. puis capturez cela dans une substitution de commande.

Référencement

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

Capture

function __add_keys
    set keys (__list_public_keys)

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

Autres conseils

Le résultat d'une substitution de commande devient une liste en se séparant sur Newlines (techniquement le contenu de $IFS, mais la modification des IF est découragée).

Afin que vous puissiez remplacer les espaces par Newlines, peut-être par tr:

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

Ou modifiez la fonction pour simplement sortir directement NewLines:

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

https://github.com/fish-shell/fish-shell/issues/445 Suit de meilleurs mécanismes pour générer des listes.

Je ne pense pas que ce soit encore possible. Comparez cela publier sur github.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top