如何从Fish Shell函数返回一个数组

时间:2013-11-07 11:47:04

标签: fish

我正在尝试从函数返回一个数组。以下代码不起作用。

function testArray
   echo 1 2 3 4
end

set r (testArray)

echo $r[2]
# error

使用fish shell从函数返回多个值的正确方法是什么?

3 个答案:

答案 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

成为列表

所以

  1. 每行列出一个项目;
  2. 然后在命令替换中捕获它。
  3. 清单

    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