1

我遇到了这段代码:

file=$(<filename)

这从文件名中读取文件。

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

我从这篇文章中读到:

如何使用双括号或单括号、圆括号、花括号

它告诉我,单括号可以用作:

- Sub bash execution
- Array construction

但在上述情况下,我不知道这是如何解释的。

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

4

3 回答 3

7

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

<...重定向;文件的内容被读取并输入到进程的标准输入中。

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

于 2013-06-18T06:31:15.370 回答
2

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

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

echo "$file"
于 2013-06-18T06:30:41.153 回答
1
echo $file

会给你一个连接的输出。

尝试

echo "$file"

这将为您提供多行的输出。

于 2013-06-18T06:33:38.643 回答