Bash中while read结合<<<$(命令)的写法是否正确?
关于该Bash写法的正确性说明
这种写法是完全正确的,它用到了Bash里的**Here字符串(Here String)**特性,<<<就是Here字符串的语法标记。
具体来说,<<<$(find /usr/lib -type d)会先执行find /usr/lib -type d命令,把输出结果作为输入传递给前面的while read循环,循环会逐行读取这些目录路径并处理(这里是打印出来)。
和常见的管道写法find /usr/lib -type d | while read -r dir相比,这种Here字符串的写法有个关键优势:它不会创建子shell,所以如果在循环里修改全局变量,改动会保留在当前shell环境中,而管道写法因为子shell的存在,全局变量的修改不会影响父shell。
虽然《Bash高级指南》里没收录这个写法,但它是Bash的标准特性,从Bash 2.05b版本开始就已经支持了。
内容的提问来源于stack exchange,提问作者learning-man
相关产品推荐
相关产品推荐

