1

while ループの外側で postPrioity を読み取れない理由は、一生わかりません。「export postPrioity="500"」を試してみましたが、それでもうまくいきませんでした。

何か案は?

-- または計画書内 --

#!/bin/bash
cat "/files.txt" | while read namesInFile; do   
            postPrioity="500"
            #This one shows the "$postPrioity" varible, as '500'
            echo "weeeeeeeeee ---> $postPrioity <--- 1"
done
            #This one comes up with "" as the $postPrioity varible. GRRR
            echo "weeeeeeeeee ---> $postPrioity <--- 2"

出力: (files.txt には 3 つのファイル名しかありません)

weeeeeeeeee ---> 500 <--- 1
weeeeeeeeee ---> 500 <--- 1
weeeeeeeeee ---> 500 <--- 1
weeeeeeeeee --->  <--- 2
4

3 に答える 3

9

パイプ演算子はサブシェルを作成します。 BashPitfallsおよびBashFAQを参照してください。解決策: を使用しないでくださいcat。とにかく役に立ちません。

#!/bin/bash
postPriority=0
while read namesInFile
do   
    postPrioity=500
    echo "weeeeeeeeee ---> $postPrioity <--- 1"
done < /files.txt
echo "weeeeeeeeee ---> $postPrioity <--- 2"
于 2009-10-07T06:08:13.013 に答える
7

Philipp の応答を補完するものとして、パイプを使用する必要がある場合 (そして彼が指摘したように、あなたの例では cat は必要ありません)、すべてのロジックをパイプの同じ側に配置できます。


command | {
  while read line; do
    variable=value
  done
  # Here $variable exists
  echo $variable
}
# Here it doesn't

于 2009-10-07T07:52:52.730 に答える
1

または、プロセス置換を使用します。

while read line
do    
    variable=value  
done < <(command)
于 2009-10-07T10:28:51.570 に答える