bash中的这段代码读取和处理变量中的行
while read -r line; do
echo "... $line ..."
done <<< "$list"
如果我替换&lt;&lt;&lt;与&lt;,它不起作用。不知道为什么会这样
答案 0 :(得分:0)
来自Bash手册页:
Here Strings
A variant of here documents, the format is:
<<<word
The word undergoes brace expansion, tilde expansion, parameter and variable expansion, command substitution, arithmetic expansion, and quote removal. Pathname expansion and word
splitting are not performed. The result is supplied as a single string to the command on its standard input.
您可以通过查阅参考手册找到这样的答案,这些手册在linux中可以通过man
命令轻松访问。
答案 1 :(得分:0)
查看 this page。
重定向输入
N < SOURCE
输入描述符N使用SOURCE作为其数据源。如果N是 省略,假定filedescriptor 0(stdin)。
和
<<TAG ... TAG
here-document是使用指定的源数据的输入重定向 直接在命令行(或在脚本中),没有&#34;外部&#34;资源。 重定向运算符&lt;&lt;与标签TAG一起使用 用于标记以后输入的结束:
# display help cat <<EOF Sorry... No help available yet for $PROGRAM. Hehe... EOF
和
<<< WORD
here-strings是here-documents的变体。 WORD这个词 用于输入重定向:
cat <<< "Hello world... $NAME is here..."
如果它包含空格,请注意引用WORD。否则 休息将作为正常参数给出。
here-string会在数据上添加换行符(\ n)。
答案 2 :(得分:0)
<
用于从文件重定向。因此< "$list"
查找名称为list
变量值的文件,并尝试从该文件中读取。
<<<
创建一个here-string,<<< "$list"
直接从变量的值中读取。
答案 3 :(得分:0)
两者都是重定向的形式。有三种标准I / O流:标准输入(stdin
),标准输出(stdout
)和标准错误(stderr
)。默认情况下,所有指针都指向当前终端,但所有指针都可以重定向到其他位置。
stdin
命令使用read
时,输入默认来自键盘,但可以来自文件(请记住“一切都是文件”)。
在<
的情况下,输入来自用户指定的文件(忽略进程替换的额外复杂性)。
但是有两种结构可以让我们在脚本中指定数据,这些是<<
(一个 heredoc )和<<<
(一个这里 - 串)。这两个“神奇地”将脚本中的数据重定向到命令的stdin
。
魔术不是特别有效。在幕后发生的事情是创建一个临时文件,将数据写入其中,然后将该文件用于输入。
所以,区别在于:
<
用户提供文件
<<<
shell根据提供的数据为您创建文件
(参考:bash源代码redir.c
,特别是函数write_here_string()
)