GNU/Linux >> Tutoriels Linux >  >> Linux

Portée variable pour les scripts shell bash et les fonctions dans le script

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

Oui, ils le font et toutes les modifications apportées à la variable dans un sous-shell ne sont pas visibles dans le shell parent.

How do I work around this issue?

Vous pouvez probablement essayer cette boucle qui évite de générer un sous-shell :

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 :Mais testfunc sera toujours appelé dans le sous-processus.


Vous pouvez essayer quelque chose comme

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. Personnalisation du shell Bash

  2. Comment obtenir la propre adresse IP et l'enregistrer dans une variable dans un script shell ?

  3. Pourquoi le shell Bash ne vous avertit-il pas d'un débordement arithmétique, etc. ?

  4. Script Shell avec fonction et paramètre comme variables ?

  5. Comment faire écho à une nouvelle ligne dans les scripts shell bash

Utiliser l'extension .sh ou .bash pour les scripts bash ?

Pourquoi le Regex dans Bash ne fonctionne-t-il que s'il s'agit d'une variable et pas directement ? ?

Comprendre la boucle for dans les scripts shell

Utilisation du script Apache2Buddy pour les performances et la stabilité

convention de nommage pour le script shell et le makefile

Quelle est la différence entre &> et >&en bash ?