我遇到了这段代码:
file=$(<filename)
这将从文件名中读取文件。
我的问题是这是如何运作的?
我从这篇文章中读到:
How to use double or single brackets, parentheses, curly braces
它告诉我,单括号可以起到:
的作用- Sub bash execution
- Array construction
但在上面的案例中,我不知道这是怎么解释的。
除了这个问题,我想知道为什么当我echo $file
时,文件内容会连接成一行?
答案 0 :(得分:7)
$(...)
执行命令替换;读取内部命令,并将stdout的输出返回给脚本。
<...
是重定向;读取文件的内容并将其输入到进程的stdin中。
将两者放在一起会产生一个隐式cat
,将重定向的stdin连接到命令替换的stdout,将文件的内容读入脚本。
答案 1 :(得分:2)
您必须将变量括在双引号中,否则它将扩展为将传递给echo的命令行参数。
如果将它括在双引号中,变量将作为单个参数传递,echo将正确显示它。
echo "$file"
答案 2 :(得分:1)
echo $file
会给你一个连续的输出。
尝试
echo "$file"
这将为您提供多行输出。