Frage

Ich versuche, ein Array aus einer Funktion zurückzugeben. Der folgende Code funktioniert nicht.

function testArray
   echo 1 2 3 4
end

set r (testArray)

echo $r[2]
# error

Was ist der richtige Weg, um mehrere Werte aus einer Funktion mit Fischschale zurückzugeben?

War es hilfreich?

Lösung 2

Wie erklärt lächerlich_fish Sie können nativen Leitungsmechanismus verwenden.

Das Ergebnis einer Befehlssubstitution wird zu einer Liste durch Aufspalten auf Neulingen ($IFS)

So

  1. Listen Sie einen Element pro Zeile auf;
  2. Erfassen Sie das dann in einer Befehlssubstitution.

Auflistung

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

Erfassen

function __add_keys
    set keys (__list_public_keys)

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

Andere Tipps

Das Ergebnis einer Befehlssubstitution wird zu einer Liste durch Aufteilung von Neulingen (technisch gesehen der Inhalt von $IFS, aber das Ändern von IFs ist entmutigt).

Sie könnten also möglicherweise Räume durch Neuleitungen ersetzen, vielleicht durch tr:

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

Oder ändern Sie die Funktion so, dass sie nur neue Zeilen direkt ausgeben:

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

https://github.com/fish-shell/fish-shell/issues/445 Verfolgt bessere Mechanismen zum Erstellen von Listen.

Ich denke, das ist noch nicht möglich. Vergleichen Sie das Ausgabe auf Github.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top