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

时间:2015-04-08 11:07:00

标签: shell fish

在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

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

2 个答案:

答案 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