Pregunta

Estoy tratando de devolver una matriz de una función. El código a continuación no funciona.

function testArray
   echo 1 2 3 4
end

set r (testArray)

echo $r[2]
# error

¿Cuál es la forma correcta de devolver múltiples valores de una función usando la carcasa de pescado?

¿Fue útil?

Solución 2

Como se explica por ridículo_fish Puede usar el mecanismo de división de línea nativa.

El resultado de una sustitución de comando se convierte en una lista dividiendo en nuevas líneas ($IFS)

Asi que

  1. Lista de un elemento por línea;
  2. Luego capture eso en una sustitución de comando.

Listado

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

Capturado

function __add_keys
    set keys (__list_public_keys)

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

Otros consejos

El resultado de una sustitución de comando se convierte en una lista dividiendo en nuevas líneas (técnicamente el contenido de $IFS, pero se desaconseja modificar IFS).

Entonces podría reemplazar espacios con nuevas líneas, tal vez con tr:

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

O modificar la función para simplemente emitir nuevas líneas directamente:

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

https://github.com/fish-shell/fish-shell/issues/445 rastrea mejores mecanismos para generar listas.

No creo que esto sea posible todavía. Compare esto tema en Github.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top