将项目添加到管道项目列表中

将项目添加到管道项目列表中

我需要将项目添加到项目列表中。我不确定这些术语是否正确。

例子:

假设我位于一个包含 2 个文件“a”和“b”的目录中。如果我通过管道传输lsless我的列表,将有两个项目:“a”和“b”:ls | less

我想将 ls 通过管道传输到 less,但在到达 less 命令之前,我希望将一个项目添加到列表中。例如:

ls -->unknow shell feature<-- less

less 列出的内容将是“a”、“b”和“c”(文件“c”不存在)

是否可以?

答案1

最简单的是

(ls;echo c) | less

答案2

是的,这是有可能实现的。下面是两个例子:

使用管道两次:

ls | (cat;echo fuzz) | less

使用输入重定向:

ls | less < <(cat;echo fuzz)

zsh shell您还可以使用:

ls | <<<"buzz" | less
#or
ls | < <(echo fuzz) | less

答案3

如果您只想列出当前目录中的每个可见名称,请将其添加c到列表末尾,然后在以下位置查看结果less

printf '%s\n' * c | less

这个答案的其余部分涉及创建一个单独的文件名列表,向该列表添加一些内容,然后将其用作 的参数less,或者查看 中的列表less(取决于我们如何解释问题)。


您可以使用一个数组来存储当前目录中所有可见文件的名称:

names=( * )

您可以将内容添加到数组的末尾:

names+=( c )

...或者当您设置数组的初始值时一次性:

names=( * c )

您可以使用数组中的元素作为参数less

less -- "${names[@]}"

(用于--确保将less参数解释为文件名而不是选项。如果任何文件名以破折号开头,这一点很重要。)

names或者,您可以使用以下命令列出数组的元素less

printf '%s\n' "${names[@]}" | less

执行相同的操作,但使用位置参数列表代替命名数组:

set -- *
set -- "$@" c

... 或者,

set -- * c

然后less使用这些元素作为参数进行调用:

less -- "$@"

或者,用 列出位置参数less

printf '%s\n' "$@" | less

请注意,上述所有命令中的引号都很重要。"$@"像这样的引用"${names[@]}"可确保 shell 将它们扩展为单独引用的元素的列表。

相关内容