gpt4 book ai didi

bash - 为什么将我的 $PATH 与 `read -r -a line` 分开工作但不能与 `while read -r line` 分开?

转载 作者:行者123 更新时间:2023-12-05 09:37:20 30 4
gpt4 key购买 nike

刚刚注意到一些我无法解释的奇怪现象:

当我使用 read -a 拆分我的 $PATH 变量时,一切正常

IFS=: read -r -a lines <<< "$PATH"
for line in "${lines[@]}"; do echo "$line"; done

但是当我尝试使用 while ... read 循环做同样的事情时,只打印第一行

while IFS=: read -r line; do echo "$line"; done <<< "$PATH"

最佳答案

可以完成这项工作;从使用 IFS=: 切换到使用 -d:,并将 : 附加到输入流的末尾:

while IFS= read -r -d: line; do echo "$line"; done <<< "$PATH:"

不同的是IFS是用来寻找单词之间的边界,而read -r line读入exactly one变量,line,所以它根本不是在寻找多个单词。相比之下,-d 告诉每次 read 调用要停止的字符;默认情况下这是一个换行符,但您可以将其替换为任何其他单个字符。 (如果未找到该字符,read 将以非零状态退出;这就是为什么标准/惯用的 while read 循环习惯用法会跳过文件的最后一行,如果它不是' 以换行符正确终止,以及为什么我们在这里使用 $PATH: 作为我们的输入)。

另一方面,如果您运行 IFS=: read -r first second rest,它会将您的第一个 PATH 条目放入$first,第二个放入$second,该行的剩余部分放入$rest;而使用 IFS: read -r line,就好像你只有一个项目,$rest

关于bash - 为什么将我的 $PATH 与 `read -r -a line` 分开工作但不能与 `while read -r line` 分开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64342341/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com