使用$(cat)
和$@
捕获传递给脚本的参数之间有什么区别吗?
例如,这是不同的
my_data=$(cat)
echo "$my_data" | "$my_script"
而不是执行
"$my_script" "$@"
我问这个是因为我发现了一个$(cat)
没有将它的stdin连接到stdout的情况,就像运行git hooks时那样。因此,它没有捕获args,但$@
没有问题。
答案 0 :(得分:3)
这完全没有意义:
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将两个值传递给程序,程序可以直接访问这些值而无需任何解析。
通过标准输入传递的优点是您可以逐字传递大数据。通过命令行参数传递的优点是您可以传递不同的值而无需解析它们。它的缺点是命令行有一个长度限制,而且你必须小心转义shell可能解释的值。
您可以使用更适合您任务的方法。如果这对你的程序有意义的话,你也可以同时使用它们。