Как вернуть массив из функции с рыбной оболочкой

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

  •  25-07-2022
  •  | 
  •  

Вопрос

Я пытаюсь вернуть массив из функции. Код ниже не работает.

function testArray
   echo 1 2 3 4
end

set r (testArray)

echo $r[2]
# error

Как правильный способ вернуть несколько значений из функции с использованием рыбной оболочки?

Это было полезно?

Решение 2

Как объяснено Смешная_ рыба Вы можете использовать насыщенный механизм расщепления линий.

Результат замены команды становится списком, разделяя новые линии ($IFS)

Так

  1. Перечислите один элемент за строку;
  2. Затем запечатлеть это в замене команды.

Список

function __list_public_keys
    for key in ~/.ssh/*.pub
        echo $key
    end
end
выход
$ __list_public_keys
/home/ed8/.ssh/id_rsa.blabla.pub
/home/ed8/.ssh/id_rsa.pub
/home/ed8/.ssh/id_rsa.test.pub

Захват

function __add_keys
    set keys (__list_public_keys)

    echo "[" $keys "]"
end
выход
$ __add_keys
[/home/ed8/.ssh/id_rsa.blabla.pub] [/home/ed8/.ssh/id_rsa.pub] [/home/ed8/.ssh/id_rsa.test.pub]

Другие советы

Результатом замены команды становится список, разделяя новички (технически содержание $IFS, но модификация IFS обескуражена).

Таким образом, вы можете заменить пространства новыми линиями, возможно, с tr:

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

Или изменить функцию, чтобы напрямую выводить новички:

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

https://github.com/fish-shell/fish-shell/issues/445 Отслеживает лучшие механизмы для создания списков.

Я не думаю, что это еще возможно. Сравните это проблема на GitHub.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top