为什么我看到的每个例子都有 while IFS= read line 而不是 while IFS=; read line

我认为 name=value command 可能设置了一个局部变量,但 sentence="hello" echo $sentence 不起作用,而 sentence="hello"; echo $sentence 起作用。

最佳答案

这:

name=value command

语法将namevalue设置为command。在你的例子中:
$ sentence="hello" echo $sentence

$sentence 由调用 shell 扩展,它看不到设置。如果你这样做
$ sentence="hello" sh -c 'echo $sentence'

(注意单引号使 $ 被调用的 shell 扩展)它会回显 hello 。如果你尝试
$ sentence="hello"; sh -c 'echo $sentence'

它不会回显任何内容,因为 sentence 是在当前 shell 中设置的,而不是在被调用的 shell 中设置,因为它没有被导出。所以
IFS=; read line

不会工作,因为 read 不会看到 IFS 设置。

关于bash - `while IFS= read line` 的语法记录在哪里?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6830735/

10-13 07:26