为什么换行符会弄乱我的 while 条件?

Ank*_*wal 4 shell bash environment-variables control-flow

我有一个 while 循环,它允许在以一种方式编写时设置变量,但在以另一种方式编写时不允许它。这是为什么?这将 var 打印为 1234 并且不打印 var2

#!/bin/bash

var=1234

while var=9876 var2=765 read line
do

    echo $var $var2
    echo $line

done <datafile

echo out of loop $var
Run Code Online (Sandbox Code Playgroud)

这将 var 打印为 9876 并打印 var2

#!/bin/bash

var=1234

while 
var=9876 
var2=765 
read line
do

    echo $var $var2
    echo $line

done <datafile

echo out of loop $var
Run Code Online (Sandbox Code Playgroud)

Pet*_*r.O 5

在你的第二个例子中,通过将 var 和 var2 放在不同的行上,这使得命令与

while var=9876; var2=765; read line
Run Code Online (Sandbox Code Playgroud)

while命令允许在执行 do--while 循环中的命令之前提供命令列表。   help while显示这个:

while:同时命令;执行命令;done
  只要测试成功就执行命令。
  只要
  `while' COMMANDS 中的最后一个命令的退出状态为零,就展开并执行COMMANDS 。
  退出状态:返回最后执行的命令的状态。

另一方面,当变量赋值在命令之前(在这种情况下read),并且该赋值后面只有空格,该变量的作用域仅对命令而言是局部的!(内部)...

请参阅:  在 'while IFS= read..' 中,为什么 IFS 没有效果?