改行文字が私のwhile条件を混乱させる理由は何ですか?

改行文字が私のwhile条件を混乱させる理由は何ですか?

ある方法で作成すると変数を設定できますが、別の方法で作成すると変数を設定できない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

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

ベストアンサー1

2番目の例では、varとvar2を異なる行に配置して、コマンドを次のようにします。

while var=9876; var2=765; read line

このwhileコマンドを使用すると、do-whileループでコマンドを実行する前にコマンドのリストを表示できます。    help whileこれを見せてください:

while:同時にコマンドを実行します。 done
  テストの成功中にコマンドを実行します。 COMMANDS は 'while' COMMANDS の最後のコマンド終了状態が 0
  の間拡張されて実行されます。終了ステータス:最後に実行されたコマンドのステータスを返します。

一方、変数の割り当てがコマンドの前にあり(この場合read)、割り当ての後にスペースがある場合、変数の範囲はコマンドのローカル範囲だけです! (内部)...

望むより:  「IFS = read..」の間にIFSが何も効果がないのはなぜですか?

おすすめ記事