質問

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

function testArray
   echo 1 2 3 4
end

set r (testArray)

echo $r[2]
# error

フィッシュシェルを使用して関数から複数の値を返す適切な方法は何ですか?

役に立ちましたか?

解決 2

説明されているように Ridiculous_fish ネイティブのライン分割メカニズムを使用できます。

コマンド代替の結果は、NewLinesで分割することによりリストになります($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]

他のヒント

コマンド代替の結果は、Newlinesを分割することによりリストになります(技術的にはの内容 $IFS, 、しかし、IFSを変更することは落胆します)。

そのため、スペースをニューラインに置き換えることができます。 tr:

function testArray
   echo 1 2 3 4
end
set r (testArray | tr ' ' \n)
echo $r[2]

または、関数を変更して、NewLinesを直接出力するだけです。

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