GNU/Linux >> Linux Esercitazione >  >> Linux

Ambito variabile per gli script e le funzioni della shell bash nello script

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

Sì, lo fanno e tutte le modifiche apportate alla variabile in una subshell non sono visibili nella shell madre.

How do I work around this issue?

Probabilmente puoi provare questo ciclo che evita di generare una subshell:

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:Ma testfunc verrà comunque richiamato nel processo secondario.


Puoi provare qualcosa come

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. Navigazione nella shell Bash con pushd e popd

  2. Come ottenere il proprio indirizzo IP e salvarlo in una variabile in uno script di shell?

  3. Il motivo per cui Bash Shell non ti avverte di overflow aritmetico ecc.?

  4. convenzione di denominazione per script di shell e makefile

  5. Bash Shell Script:verifica la presenza di un flag e acquisisci il suo valore

Personalizzazione della shell Bash

Lo scopo della parola chiave "do" in Bash For Loops?

Script di shell con funzione e parametro come variabili?

Come fare eco a una nuova riga negli script di Bash Shell

Comprendere il ciclo for negli script della shell

Utilizzo dello script Apache2Buddy per prestazioni e stabilità