Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/jquery-mobile/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Echo fish-在多行上打印数组/列表_Echo_Fish - Fatal编程技术网

Echo fish-在多行上打印数组/列表

Echo fish-在多行上打印数组/列表,echo,fish,Echo,Fish,我想打印一个数组,其中每个元素都在一条线上,这样我就可以通过管道将它传输到其他工具 例如: > set foo "A 1" "B 3" "C 9" > echo $foo A 1 B 3 C 9 <-- Not clear what the elements are! > for i in $foo; echo $i; end; <-- Too verbose fo

我想打印一个数组,其中每个元素都在一条线上,这样我就可以通过管道将它传输到其他工具

例如:

> set foo "A 1" "B 3" "C 9"
> echo $foo
A 1 B 3 C 9                     <-- Not clear what the elements are!
> for i in $foo; echo $i; end;  <-- Too verbose for working
>设置foo“a1”b3“c9”
>回声$foo

A 1 B 3 C 9表示i,单位为$foo;echo$i;结束 要检查变量
set-S foo
set的内容,show foo
很好

set foo "A 1" "B 3" "C 9" "element
with
newlines"
set -S foo
显示

这是FishV3.2.0——我记得,早期版本有更详细的细节


或者,
printf
带有一些开始/结束标记:

$ printf '>>%s<<\n' $foo
>>A 1<<
>>B 3<<
>>C 9<<
>>element
with
newlines<<

$printf'>%s检查变量
set-s foo
set-show foo
的内容很好

set foo "A 1" "B 3" "C 9" "element
with
newlines"
set -S foo
显示

这是FishV3.2.0——我记得,早期版本有更详细的细节


或者,
printf
带有一些开始/结束标记:

$ printf '>>%s<<\n' $foo
>>A 1<<
>>B 3<<
>>C 9<<
>>element
with
newlines<<
$printf'>>%s
注意:使用tr/sed/string连接并不是我正在寻找的解决方案。不能保证任何元素都不包含换行符或空格字符

如果元素可以包含换行符,则在一行上打印每个元素已经中断

例如

你可以用打印机打印这个

printf %s\n $foo
但这将导致

a
b
c
因此,无论您使用何种命令,它都不知道“a\nb”是一个元素

正如其他人所说,要显示变量包含的内容,您可以使用
set--show foo
或类似的方法

printf '|%s|\n' $foo
但在将其传递给命令时,这将不起作用,因为它不知道您的格式是什么

您需要重新考虑数据格式,或者将数据作为参数传递,而不是通过stdin。您需要做什么完全取决于您调用的命令以及它应该做什么

如果您的命令有一个读取空分隔输入的开关,则可以使用
string join0
类似的

 string join0 $foo | baz --read0
例如,如果$foo是一个文件列表,您希望对其使用
du

 string join0 $foo | du --files0-from=-
虽然在这种情况下,您也可以像这样直接将它们作为参数传递

 du $foo
注意:使用tr/sed/string连接并不是我正在寻找的解决方案。不能保证任何元素都不包含换行符或空格字符

如果元素可以包含换行符,则在一行上打印每个元素已经中断

例如

你可以用打印机打印这个

printf %s\n $foo
但这将导致

a
b
c
因此,无论您使用何种命令,它都不知道“a\nb”是一个元素

正如其他人所说,要显示变量包含的内容,您可以使用
set--show foo
或类似的方法

printf '|%s|\n' $foo
但在将其传递给命令时,这将不起作用,因为它不知道您的格式是什么

您需要重新考虑数据格式,或者将数据作为参数传递,而不是通过stdin。您需要做什么完全取决于您调用的命令以及它应该做什么

如果您的命令有一个读取空分隔输入的开关,则可以使用
string join0
类似的

 string join0 $foo | baz --read0
例如,如果$foo是一个文件列表,您希望对其使用
du

 string join0 $foo | du --files0-from=-
虽然在这种情况下,您也可以像这样直接将它们作为参数传递

 du $foo

如果您想通过管道连接到其他工具,这些工具将按行读取,并且您的列表元素可以包含换行符—您的格式已被破坏!这些工具已经无法重建您的元素。如果您希望通过管道连接到其他工具,则这些工具将按行读取,并且您的列表元素可以包含换行符。您的格式已被破坏!这些工具已经无法重建您的元素。早期版本还将明确告诉您它不在哪些范围内,因此您将得到一堆“未在本地范围内设置”和“未在通用范围内设置”。这没有用,所以我们把它放在了3.2.OMG中!我怎么不知道
-S
。我几年前刚读过r
set
set的文档,从来没有想到过新功能。其实不是新功能。只是新版本稍微截断了输出,使其更加有用,但是
set--show
已经是一个很好的命令了;-)。这就是说,它的输出对于管道传输到另一个命令来说并不是很好——为此,我使用
printf
表单。早期版本还将明确告诉您它不在哪些范围内,因此您将得到一堆“未在本地范围内设置”和“未在通用范围内设置”。这没有用,所以我们把它放在了3.2.OMG中!我怎么不知道
-S
。我几年前刚读过r
set
set的文档,从来没有想到过新功能。其实不是新功能。只是新版本稍微截断了输出,使其更加有用,但是
set--show
已经是一个很好的命令了;-)。也就是说,它的输出对于管道传输到另一个命令来说并不是很好——我会使用
printf
表单来实现这一点。是的,关于新行,您是对的。我可能已经提前包含了(我的要求只是空格)。e、 g.
设置cwd_la(ls-la)
然后就有了带有空格/制表符的列。事实上,我很惊讶它没有创建2D数组,因为fish在设置变量时会将空格作为下一个元素。fish没有2D数组,并且它不会在空格或制表符上拆分命令替换,只有换行符。是的,关于换行符,你是对的。我可能已经提前包含了(我的要求只是空格)。e、 g.
设置cwd_la(ls-la)
然后就有了带有空格/制表符的列。事实上,我很惊讶它没有创建2D数组,因为fish在设置变量时会将空格作为下一个元素。fish没有2D数组,并且它不会在空格或制表符上拆分命令替换,只有换行符。