Domanda

Sto cercando di restituire un array da una funzione. Il codice seguente non funziona.

function testArray
   echo 1 2 3 4
end

set r (testArray)

echo $r[2]
# error

Qual è il modo corretto per restituire più valori da una funzione usando il guscio di pesce?

È stato utile?

Soluzione 2

Come spiegato da ridicolo_fish È possibile utilizzare il meccanismo nativo di scissione della linea.

Il risultato di una sostituzione del comando diventa un elenco dividendo su nuove linee ($IFS)

Così

  1. Elenca un elemento per riga;
  2. Quindi catturalo in una sostituzione del comando.

Elenco

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

Cattura

function __add_keys
    set keys (__list_public_keys)

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

Altri suggerimenti

Il risultato di una sostituzione del comando diventa un elenco dividendo su nuove linee (tecnicamente il contenuto di $IFS, ma la modifica dell'IFS è scoraggiata).

Quindi potresti sostituire gli spazi con le nuove linee, forse con tr:

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

O modificare la funzione su limiti di limite direttamente:

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

https://github.com/fishshell/fishshell/issues/445 Tiene traccia di meccanismi migliori per la generazione di elenchi.

Non credo che sia ancora possibile. Confronta questo problema su github.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top