GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Variablenbereich für Bash-Shell-Skripte und Funktionen im Skript

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

Ja, und alle Änderungen, die an Variablen in einer Subshell vorgenommen werden, sind in der übergeordneten Shell nicht sichtbar.

How do I work around this issue?

Sie können wahrscheinlich diese Schleife ausprobieren, die das Spawnen einer Subshell vermeidet:

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:Aber testfunc wird weiterhin im Unterprozess aufgerufen.


Sie können so etwas wie

versuchen
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. Wie erhalte ich die eigene IP-Adresse und speichere sie in einer Variablen in einem Shell-Skript?

  2. Die Begründung dafür, dass die Bash-Shell Sie nicht vor arithmetischem Überlauf usw. warnt?

  3. Verwenden Sie die Erweiterung .sh oder .bash für Bash-Skripte?

  4. Shell-Skript mit Funktion und Parameter als Variablen?

  5. So echoen Sie eine neue Zeile in Bash-Shell-Skripten

Anpassen der Bash-Shell

Der Zweck des Schlüsselworts „do“ in Bash-For-Schleifen?

Warum funktioniert die Regex in Bash nur, wenn es sich um eine Variable handelt und nicht direkt?

Die for-Schleife in Shell-Skripten verstehen

Formatieren Sie Datum und Uhrzeit für Linux-Shell-Skript oder -Variable

Wie bekomme ich den Namen des aktuellen Git-Zweigs in eine Variable in einem Shell-Skript?