GNU/Linux >> Linux の 問題 >  >> Linux

スクリプト内の bash シェル スクリプトおよび関数の変数スコープ

<ブロック引用>

Do the backticks spawn a subshell and thus making my script not work? :

はい、そうです。サブシェルで変数に加えられた変更は、親シェルでは表示されません。

<ブロック引用>

How do I work around this issue?

おそらく、サブシェルの生成を回避するこのループを試すことができます:

while read line
do
   while read i
   do
      end=$(echo $i | cut -d ' ' -f 1-4 | cut -d ',' -f 1)
      duration=$(testfunc "$end")
   done < <(grep -P "\w+ stream" "$file2" | grep "$line")
done < "$file1"

PS:でも testfunc サブプロセスで呼び出されます。


次のようなものを試すことができます

global1=0
global2=0
start_read=true

function testfunc {
   global1=9999
   global2=1111
   echo "in testfunc"
   echo $global1
   echo $global2
   duration=something
}

file1=whocares
file2=whocares2

for line in `cat $file1`
do
   for i in `grep -P "\w+ stream" $file2 | grep "$line"`   # possible but unlikely problem spot
   do
         end=$(echo $i | cut -d ' ' -f 1-4 | cut -d ',' -f 1)   # possible but unlikely spot
         testfunc $end       # more likely problem spot
   done
done

echo "global1 = $global1"
echo "global2 = $global2"

Linux
  1. シェルスクリプトとメイクファイルの命名規則

  2. Bash シェル スクリプト - フラグをチェックしてその値を取得する

  3. bash スクリプトのコマンドとターミナルのコマンドの違い

  1. pushdとpopdを使用してBashシェルをナビゲートする

  2. 独自のIPアドレスを取得し、シェルスクリプトの変数に保存する方法は?

  3. Bashスクリプトに.shまたは.bash拡張子を使用しますか?

  1. Bashシェルスクリプトで改行をエコーする方法

  2. パフォーマンスと安定性のためのApache2Buddyスクリプトの使用

  3. Linux シェル スクリプトまたは変数の日付と時刻の書式設定