如何从fish shell中的命令替换输出中捕获换行符?

tom*_*kwi 8 shell fish

在bash中,通过命令替换保留换行符:

$ TEST="$(echo 'a
  b
  c
  ')" && echo "$TEST"
# ?
a
b
c
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试在fish shell中执行相同操作时,换行符会转换为空格:

$ set TEST (echo "a
  b
  c
  "); and echo "$TEST"
# ?
a b c
Run Code Online (Sandbox Code Playgroud)

如何使鱼将换行符保存为换行符?

Rap*_*ael 6

从概念上讲,它们不会转换为空格:您得到的是一个列表!

> echo -e "1\n2\n3" > foo
> cat foo
1
2
3
> set myFoo (cat foo)
> echo $myFoo
1 2 3
> echo $myFoo[0..2]
1 2
Run Code Online (Sandbox Code Playgroud)

因此,我们应用可用于列表的机制;例如,使用分隔符连接(注意额外的退格键以消除不需要的空格):

> echo {\b$myFoo}\n
1
2
3
 # extra newline here
Run Code Online (Sandbox Code Playgroud)

这并不理想;字符串做得更好:

> string join \n $myFoo
1
2
3
Run Code Online (Sandbox Code Playgroud)