15

関数から配列を返そうとしています。以下のコードは機能しません。

function testArray
   echo 1 2 3 4
end

set r (testArray)

echo $r[2]
# error

魚の殻を使用して関数から複数の値を返す適切な方法は何ですか?

4

3 に答える 3

13

コマンド置換の結果は、改行で分割されたリストになります (技術的には の内容ですが$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は、リストを生成するためのより優れたメカニズムを追跡します。

于 2013-11-07T18:50:18.927 に答える
6

ばかげた_fishで説明されているように、ネイティブの行分割メカニズムを使用できます。

コマンド置換の結果は、改行で分割されてリストになります ( $IFS)

そう

  1. 1 行に 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]
于 2016-09-27T11:59:36.987 に答える
0

これはまだ可能ではないと思います。GitHub でこの問題を比較してください。

于 2013-11-07T11:57:01.800 に答える