varに格納されているFishシェルコマンドの代替出力の形式を維持する方法は?

varに格納されているFishシェルコマンドの代替出力の形式を維持する方法は?

私はこの理由でしばらく頭を傷つけました。

> cat file
line1
line2
> set tst (cat file)
> echo "$tst" 
line1 line2
> set tst "(cat file)"
> echo "$tst"
(cat file)

bash次のように実行できます。

$ cat file
line1
line2
$ tst=$(cat file)
$ echo "$tst"
line1
line2

ベストアンサー1

デフォルトでは、fishはコマンド置換を分割します((command))。この動作を無視するには、特殊機能を使用できます。ひもstring split(分割対象を定義できます)、string split0(NULバイト分割)、string collect([0]を全く分割しない)などのサブコマンドです。

答えは次のとおりです。

set tst (cat file | string collect)
echo $tst

[0]:Unixは引数をNUL終了文字列として渡すため、NULバイトをコマンドに渡すことはできません。したがって、コマンドは引数が続くかどうかを知らないため、string collect実際には最初のNULまでコマンド出力をキャプチャします。最大1つのエントリがあるため、複数のパラメータstring split0が発生する可能性があります。

おすすめ記事