如何保留存储在 var 中的 Fish shell 命令替换输出的格式?

如何保留存储在 var 中的 Fish shell 命令替换输出的格式?

由于这个原因,我已经挠头一段时间了:

> 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]:请注意,NUL 字节不能传递给命令,因为 unix 将参数作为以 NUL 结尾的字符串传递,因此命令无法知道参数继续,因此string collect实际上只是捕获命令输出到第一个 NUL,最多给您一个条目,而string split0可能会导致多个参数。

答案2

Fish 将命令替换的结果保存为行列表(除非string collect使用 if )。所以你可以做

> set tst (cat file)
> printf '%s\n' $tst
line1
line2

相关内容