我正在研究bash,但无法理解以下示例代码:
while IFS= read -r line2;
do
if [[ "$line1" == "$line2" ]]
then
(( i++ ))
fi
done <<< "$lines"
特别是线done <<< "$lines"
是什么意思<<<
?
我找到其他示例,例如:
while read line
do
echo "Word count per line: $line"
done < <(cat list.txt | wc -w)
在这种情况下,因为它使用< <
不<<<
每当编写循环时,都可以使用以下表达式将其与文件内容一起馈入:
while ...; do
# things
done < file
然后,您可以通过使用进程替代而不是文件本身来利用此优势。这样,您可以将while
循环的结果提供给循环,而不必进行管道传递。在内部,它会创建一个临时文件:
while ...; do
# things
done < <(find -type f -name ".htaccess")
但是,为什么使用这种方法代替它很重要cat file | wc -w | while ...
?因为此操作将打开一个子外壳,所以您在while
循环中设置的任何变量一旦完成将丢失。
例如,如果您说:
$ var=5
$ seq 10 | while read v; do var=$v; done
然后,变量$var
未10
在循环结束时设置为,但它保持不变:
$ echo $var
5
您可以在管道循环中设置变量,以了解更多信息。为什么它们在循环终止后消失了?或者,为什么我不能通过管道读取数据?。
然后,您将:
while ...; do
# things
done <<< "$variable"
这将在此处向while
循环提供一个字符串。也就是说,while
循环会不断读取内容,$variable
直到完成为止。
例如,以下代码:
while IFS=: read -r product price; do
echo "$product cost $price euros"
done <<< "potatos:23
kiwis:45"
将返回:
potatos cost 23 euros
kiwis cost 45 euros
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句