单括号在这里做什么?

时间:2013-06-18 06:26:14

标签: bash shell

我遇到了这段代码:

file=$(<filename)

这将从文件名中读取文件。

我的问题是这是如何运作的?

我从这篇文章中读到:

How to use double or single brackets, parentheses, curly braces

它告诉我,单括号可以起到:

的作用
- Sub bash execution
- Array construction

但在上面的案例中,我不知道这是怎么解释的。

除了这个问题,我想知道为什么当我echo $file时,文件内容会连接成一行?

3 个答案:

答案 0 :(得分:7)

$(...)执行命令替换;读取内部命令,并将stdout的输出返回给脚本。

<...重定向;读取文件的内容并将其输入到进程的stdin中。

将两者放在一起会产生一个隐式cat,将重定向的stdin连接到命令替换的stdout,将文件的内容读入脚本。

答案 1 :(得分:2)

您必须将变量括在双引号中,否则它将扩展为将传递给echo的命令行参数。

如果将它括在双引号中,变量将作为单个参数传递,echo将正确显示它。

echo "$file"

答案 2 :(得分:1)

echo $file

会给你一个连续的输出。

尝试

echo "$file"

这将为您提供多行输出。