而IFS =读取-r -d $'\ 0'文件...解释

cle*_*om0 4 bash

我不明白这行shell脚本.while语句是否需要设置$的'test'或[]或[[]]表达式?到1还是0?如何

while IFS= read -r -d $'\0'; do ...; done
Run Code Online (Sandbox Code Playgroud)

去做?任何帮助理解这里的语法非常感谢.

rua*_*akh 13

在Bash中,运行命令,环境变量设置为(以及所有其他环境变量正常继承).因此运行命令时将环境变量设置为空字符串(表示没有字段分隔符).varname=value commandvarnamevalueIFS= read -r -d $'\0'read -r -d $'\0'IFS

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

while语句是否需要设置$的'test'或[]或[[]]表达式?到1还是0?

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

(顺便说一句,正如上面注释中的nosid注释,-d $'\0'相当于.Bash-d ''变量在内部表示为C风格/ NUL终止的字符串,因此你不能在字符串中真正包含NUL;例如,echo $'a\0b'只是打印a. )