什么是Bash运算符<<<意思?

时间:2011-10-31 05:32:33

标签: bash shell

bash运算符<<<<意思是,在下面的代码块里面?为什么$ IFS仍然是一个空间,而不是一个时期呢?

LINE="7.6.5.4"
IFS=. read -a ARRAY <<< "$LINE"
echo "$IFS"
echo "${ARRAY[@]}"

3 个答案:

答案 0 :(得分:16)

它将字符串重定向到命令的stdin。

以这种方式直接在命令之前分配的变量仅对命令进程生效;外壳保持不变。

答案 1 :(得分:8)

来自man bash

  

这里的字符串     这里文档的变体,格式为:

     <<<word
     

单词被扩展并在其标准输入上提供给命令。

IFS行上的.相当于bash中的source

更新:来自man bash的更多信息(谢谢gsklee,sehe)

  

IFS内部字段分隔符,用于分词      在扩展之后,用将行分成单词与read      内置命令。默认值为“<space><tab><new‐line>”。

来自man bash

的更多内容
  

可以扩充任何简单命令或功能的环境   暂时通过为参数赋值添加前缀,如上所述   以上参数。这些赋值语句仅影响该命令所见的环境。

答案 2 :(得分:2)

未设置IFS的原因是bash没有将其视为单独的命令...您需要在命令后面添加换行符或分号才能终止它:

$ cat /tmp/ifs.sh
LINE="7.6.5.4"
IFS='.'  read -a ARRAY <<< "$LINE"
echo "$IFS"
echo "${ARRAY[@]}"

$ bash /tmp/ifs.sh 


7 6 5 4

$ cat /tmp/ifs.sh 
LINE="7.6.5.4"
IFS='.';  read -a ARRAY <<< "$LINE"
echo "$IFS"
echo "${ARRAY[@]}"

$ bash /tmp/ifs.sh 
.
7 6 5 4

我不确定为什么第一种方式不是语法错误。