GNU/Linux >> Tutoriales Linux >  >> Linux

Alcance variable para scripts y funciones bash shell en el script

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

Sí, lo hacen y los cambios realizados en la variable en un subshell no son visibles en el shell principal.

How do I work around this issue?

Probablemente puedas probar este bucle que evita generar una subcapa:

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"

PD:Pero testfunc aún se llamará en subproceso.


Puedes intentar algo como

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. Navegando por el shell Bash con pushd y popd

  2. ¿Cómo obtener la dirección IP propia y guardarla en una variable en un script de Shell?

  3. ¿Cuál es el propósito de la palabra clave "do" en Bash For Loops?

  4. ¿La razón por la que Bash Shell no le advierte sobre el desbordamiento aritmético, etc.?

  5. ¿Usar la extensión .sh o .bash para scripts Bash?

Personalización del shell Bash

Comprender el bucle for en los scripts de Shell

Formato de fecha y hora para script o variable de shell de Linux

convención de nomenclatura para shell script y makefile

Copie y sobrescriba un archivo en el script de Shell

Diferencia entre comandos en bash script y comandos en terminal