我正在尝试从功能返回数组。下面的代码不起作用。

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, ,但不建议修改IF)。

因此,您可以用新线代替空间,也许 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