如何从 fish shell 中的命令替换输出中捕获换行符?
How to capture newlines from command substitution output in fish shell?
在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
如何让fish将换行符保存为换行符?
在 fish 用户邮件列表上讨论的确切问题:在 fish 用户邮件列表上讨论: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"
从概念上讲,它们不会转换为空格:您得到的是一个列表!
> 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; for instance, joining with a separator 的机制(注意额外的退格键以去除不需要的空格):
> echo {\b$myFoo}\n
1
2
3
# extra newline here
这并不理想; string 做得更好:
> string join \n $myFoo
1
2
3
在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
如何让fish将换行符保存为换行符?
在 fish 用户邮件列表上讨论的确切问题:在 fish 用户邮件列表上讨论: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"
从概念上讲,它们不会转换为空格:您得到的是一个列表!
> 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; for instance, joining with a separator 的机制(注意额外的退格键以去除不需要的空格):
> echo {\b$myFoo}\n
1
2
3
# extra newline here
这并不理想; string 做得更好:
> string join \n $myFoo
1
2
3