我有一个问题,但是很遗憾没有找到答案。我该如何将另一个命令的结果作为参数传递给脚本呢?例如:
ls | ./myscript.sh
我想将
ls
命令的结果传递给脚本 myscript
。如果我执行上述命令并且脚本如下:#!/bin/bash
read some
for arg in $@
do
grep $some $arg
done
那么它并没有等待读取some变量,变量some的值来自于传递给ls
命令的结果?这实际上是如何工作的?我想要做以下事情:将文件名(使用ls命令)添加到脚本中,然后让用户输入一些字符串,并打印包含输入单词的每一行。 我不知道为什么上面的代码不起作用。谢谢。
{}
按钮)。此外,请提供涉及读取输入的myscript.sh
的确切内容,并显示可能的输出/结果以及您想要获得的内容。 - Etan Reisnerls
中填充“some”吗?read
只是从标准输入读取,而在所示的管道中,标准输入是ls
的输出,而不是终端。 - chepnerls
命令的输出是一个非常糟糕的想法。请参考 http://mywiki.wooledge.org/ParsingLs - Charles Duffyfor arg in $@
与for arg in "$@"
(或者仅仅是for arg
,因为"$@"
是for
循环的默认目标)并不相同。如果你想在命令行上传递参数,那么你需要使用后者。 (管道将内容放在 stdin 上,而不是命令行,这是一个不同的问题)。在这种情况下,用法应该是./myscript *
来传递当前目录中的所有文件。 - Charles Duffyls
只是随意示例,而您只想要从myscript
中读取任何管道输出。您可以创建一个while read
循环,并它将从stdin
中读取。 - alvits