由于这个原因,我已经挠头一段时间了:
> 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