在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)
如何使鱼将换行符保存为换行符?
从概念上讲,它们不会转换为空格:您得到的是一个列表!
> 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)