Bash:$(cat)和“$ a”之间的差异

时间:2017-06-28 15:43:19

标签: bash shell unix

使用$(cat)$@捕获传递给脚本的参数之间有什么区别吗?

例如,这是不同的

my_data=$(cat)
echo "$my_data" | "$my_script"

而不是执行

"$my_script" "$@"

我问这个是因为我发现了一个$(cat)没有将它的stdin连接到stdout的情况,就像运行git hooks时那样。因此,它没有捕获args,但$@没有问题。

1 个答案:

答案 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可能解释的值。

您可以使用更适合您任务的方法。如果这对你的程序有意义的话,你也可以同时使用它们。