我正在尝试从函数返回一个数组。以下代码不起作用。
function testArray
echo 1 2 3 4
end
set r (testArray)
echo $r[2]
# error
使用fish shell从函数返回多个值的正确方法是什么?
答案 0 :(得分:12)
命令替换的结果通过拆分换行符(在技术上是$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跟踪更好的生成列表的机制。
答案 1 :(得分:4)
正如ridiculous_fish所解释的那样,您可以使用原生线分割机制。
命令替换的结果通过拆分换行符(
成为列表$IFS
)
所以
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]
答案 2 :(得分:0)
我认为这还不可能。在GitHub上比较这个issue。