考虑从管道获得结果:
find .
现在我想在管道后面的第二个命令中访问实际管道(输入)的内容,然后例如打印两次。
find . | printf $arg$arg\n
#each filename would be printed twice per line
请注意,问题不是要打印两次从管道中获取的任何内容,我知道如何使用 bash for loop 或编写可以完成上述操作的脚本。 如何让 $arg 在内联脚本中快速使用它?
$0 和 $1 不像在脚本文件中那样工作。
最佳答案
简短回答: 您可以使用 sed 将每个文件打印两次:
find . | sed 's/.*/& &/'
sed 可以编辑输入的行。上面的命令说
s
(替换).*
(整行)& &
(与它自己,两次)。更长的答案: 当您将一个程序通过管道传输到另一个程序时,您将第一个程序的标准输出流连接到第二个程序的标准输入流。第一个程序打印的任何内容都将被视为第二个程序的输入。
不幸的是,对于您的示例,输入不是逐行块很好地映射到假设的
$args
变量。它来自一个巨大的整体流。如果您想将流的每一行打印两次,您可以使用 sed(它是一个流编辑器),但它只是逐行替换。关于bash - 从管道获取参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17847103/