在bash中,通过命令替换保留换行符:
$ TEST="$(echo 'a
b
c
')" && echo "$TEST"
# →
a
b
c
但是,当我尝试在fish shell中执行相同操作时,换行符将转换为空格:
$ set TEST (echo "a
b
c
"); and echo "$TEST"
# →
a b c
如何将换行符保存为换行符?
答案 0 :(得分:2)
鱼类用户邮件列表中讨论的确切问题:关于鱼类用户邮件列表的讨论:http://sourceforge.net/p/fish/mailman/message/33644843/
您必须修改IFS变量才能执行此操作:
$ set out (seq 5)
$ echo "$out"
1 2 3 4 5
$ set oldIFS "$IFS"
$ set IFS ""
$ set out (seq 5)
$ echo "$out"
1
2
3
4
5
$ set IFS "$oldIFS"
答案 1 :(得分:1)
从概念上讲,它们不会转换为空格:您将获得列表!
> 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
因此,我们采用了lists可用的机制;例如joining with a separator(请注意多余的退格键可以消除多余的空格):
> echo {\b$myFoo}\n
1
2
3
# extra newline here
这不理想; string做得更好:
> string join \n $myFoo
1
2
3