【问题标题】:How to return an array from a function with Fish Shell如何使用 Fish Shell 从函数中返回数组
【发布时间】:2013-11-07 11:47:03
【问题描述】:

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

function testArray
   echo 1 2 3 4
end

set r (testArray)

echo $r[2]
# error

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

【问题讨论】:

    标签: fish


    【解决方案1】:

    命令替换的结果通过换行符拆分成为一个列表(技术上是$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 跟踪生成列表的更好机制。

    【讨论】:

      【解决方案2】:

      正如ridiculous_fish 所解释的,您可以使用本机分行机制。

      命令替换的结果通过换行符拆分为列表 ($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]
      

      【讨论】:

        【解决方案3】:

        我认为这还不可能。在 GitHub 上比较这个 issue

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-11-21
          • 2011-05-14
          • 2022-10-01
          • 2012-06-17
          • 2011-08-05
          相关资源
          最近更新 更多