带有选项 -d 和 IFS 变量组合的 Unix 读取命令

Ibr*_*ish 1 unix shell

期待了解read -dIFS变量一起出现时的行为

$ cat f1
a:b:c
d:e:f

$ while IFS= read -d: ; do echo $REPLY; done < f1
a
b
c d
e

$ while IFS=: read; do echo $REPLY; done < f1
a:b:c
d:e:f
Run Code Online (Sandbox Code Playgroud)

Chr*_*ung 5

IFS当您使用以下命令读取多个变量时使用read

$ echo foo:bar:baz | (IFS=: read FOO BAR BAZ; echo $FOO; echo $BAR; echo $BAZ)
foo
bar
baz
Run Code Online (Sandbox Code Playgroud)

而该-d选项指定您的行分隔符read是什么;read不会超过一行:

$ echo foo:bar:baz%baz:qux:quux% | while IFS=: read -d% FOO BAR BAZ; do echo ---; echo $FOO; echo $BAR; echo $BAZ; done
---
foo
bar
baz
---
baz
qux
quux
Run Code Online (Sandbox Code Playgroud)

  • 在 Unix 中,许多实用程序假定文本文件以换行符结尾。如果最后一行不以 1 结尾,则被视为不完整的行。在您的情况下,由于您使用冒号作为行分隔符,因此您的输入需要以冒号结尾。 (2认同)