记录的是什么语法`IFS = read line`?

nac*_*cab 3 bash shell

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

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

Jan*_*dec 16

的:

name=value command
Run Code Online (Sandbox Code Playgroud)

语法设置namevaluecommand.在你的例子中:

$ sentence="hello" echo $sentence
Run Code Online (Sandbox Code Playgroud)

$句子由调用shell扩展,它没有看到设置.如果你这样做

$ sentence="hello" sh -c 'echo $sentence'
Run Code Online (Sandbox Code Playgroud)

(注意单引号$由被调用的shell扩展)它会回显hello.如果你试试

$ sentence="hello"; sh -c 'echo $sentence'
Run Code Online (Sandbox Code Playgroud)

它不会回显任何东西,因为它sentence是在当前shell中设置的,而不是在被调用的shell 中,因为它没有被导出.所以

IFS=; read line
Run Code Online (Sandbox Code Playgroud)

无法工作,因为read不会看到IFS设置.

  • 这个答案并没有回答关于文档的真正问题。 (2认同)

e.d*_*dan 6

使用参数分配对命令进行前缀会影响正在执行的命令的环境.

man bash:

任何简单命令或函数的环境可以通过在其前面加上参数赋值来临时扩充,如上面参数中所述.这些赋值语句仅影响该命令所见的环境.

在你的例子中:sentence="hello" echo $sentence,sentence将在echo命令的环境中(尝试这样来表明你自己:) sentence=HI env | fgrep sentence,但不是在你调用它的shell中,echo在你尝试时需要将它作为参数传递.