为什么我们这里不需要出口?

Tim*_*Tim 0 shell environment-variables

$ IFS=";"

$ read first second 
i am;a_i b c
$ echo $first
i am
$ echo $second
a_i b c

$ echo $IFS
Run Code Online (Sandbox Code Playgroud)
  1. 我说的对,它read first second是当前 shell 进程的子进程吗?如果是,为什么我们不需要export IFS=";"
  2. 为什么是IFS空的?

cuo*_*glm 5

我是否正确地认为第一秒是当前 shell 进程的子进程?如果是,为什么我们不需要 export IFS=";"?

不,readbash bultin 函数。这里没有创建子shell或子进程,所以我们不需要导出IFS.

为什么 IFS 是空的?

因为你不使用双引号。你已经改变了价值IFS来;,所以当你echo $IFS,以后$IFS扩展到;,外壳执行字的分裂和通配符,以;作为分隔符。所以什么都没有打印。

尝试:

$ IFS=";"
$ printf "%s\n" $IFS

$ printf "%s\n" "$IFS"
;
Run Code Online (Sandbox Code Playgroud)

笔记