gpt4 book ai didi

bash - while IFS= read -r -d $'\0' file ... 解释

转载 作者:行者123 更新时间:2023-11-29 09:06:41 28 4
gpt4 key购买 nike

我不明白这行shell脚本。 while 语句不需要设置 $ 的 'test' 或 [ ] 或 [[ ]] 表达式吗?到 1 还是 0?怎么办

while IFS= read -r -d $'\0'; do ...; done

这样做?非常感谢任何有助于理解此处语法的帮助。

最佳答案

在 Bash 中,<i>varname</i>=<i>value</i> <i>command</i> 运行命令,环境变量 <i>varname</i> 设置为 <i>value</i>(以及所有其他正常继承的环境变量)。因此 IFS= read -r -d $'\0' 运行命令 read -r -d $'\0' 并将环境变量 IFS 设置为空字符串(意味着没有字段分隔符)。

由于 read 在成功读取输入且未遇到文件结尾时返回成功(即,将 $? 设置为 0 ),因此总体效果是循环一组 NUL 分隔的记录(保存在变量中REPLY)。

Doesn't the while statement need a 'test' or [ ] or [[ ]] expression that will set $? to 1 or 0?

test[ ... ][[ ... ]] 实际上不是表达式,而是命令。在 Bash 中,每个 命令都会返回成功(将 $? 设置为 0 )或失败(将 $? 设置为非零值,通常为 1 )。

(顺便说一句,正如 nosid 在上面的评论中指出的那样,-d $'\0' 等同于 -d '' 。Bash 变量在内部表示为 C 风格/以 NUL 结尾的字符串,因此您不能真正在字符串中包含 NUL;例如,echo $'a\0b' 只打印 a。)

关于bash - while IFS= read -r -d $'\0' file ... 解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18217930/

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