这是完全没有意义的:
my_data=$(cat)
echo "$my_data" | "$my_script"
如果$my_script
读取标准输入,那么这将是大致相当于:
"$my_script"
这是正确的,没有cat
,没有echo
。如果第一个例子工作,这也应该起作用,除了第一个版本由于echo
而增加了一个额外的换行符之间的微小差别。
你的问题似乎是关于通过输入到程序的不同方式。一种方法是传递标准输入。例如:
cat data.txt | prog
prog < data.txt
在这些实例中,prog
可以读取的data.txt
从stdin
的内容。如果存在多个不同的值,则prog
必须适当地解析输入以分离值。
另一种方式来传递输入到节目是经由命令行参数,例如:
prog a "b c"
在这个例子中外壳将通过两个值的程序,并且该程序可以直接访问的那些值,而无需任何解析。
通过标准输入传递了,你可以逐字传递大量数据的优势。通过命令行参数传递的优点是,您可以传递不同的值而不必解析它们。它的缺点是命令行有长度限制,并且您必须小心地转义可能由shell解释的值。
您可以使用哪种方法更适合您的任务。如果这对您的程序有意义,您也可以同时使用两者。
'cat'是外部程序,并产生不必要的子进程。如果你想阅读stdin,然后使用shell内置'read'。 '$ @''是命令行参数,并且与标准输入不连接。 – cdarke