2012-05-01 21 views
8

¿Cómo cambio esta var?Cambiar variables en bash

max=0; 
min=20000000; 
cat |while read 
do 
    read a 
    if [[ $a -gt $max ]] 
    then 
     max=a` 
    fi 
    `if [[ $a -lt $min ]] 
    then 
     min=a 
    fi 
done 
echo $max 
echo $min 

Mi min y max siguen siendo los mismos, 0 y 2000000. Puede alguien ayudarme con esto? No tengo idea.

+0

Para aquellos de nosotros que se perdió tu pregunta anterior, ¿puedes proporcionar más información sobre esta? ¿Qué var estás tratando de cambiar? –

+3

también 'max = a' debe ser' max = $ a', lo mismo con 'min = a' debe ser' min = $ a' –

+0

¿Qué debe ser 'min' si cada valor es mayor que 20000000? Supongo que 'min' y' max' deberían ser su primer valor ... –

Respuesta

13

El problema (principal) con su secuencia de comandos es que la configuración min y max ocurre en una subcadena, no en su caparazón principal. Entonces los cambios no son visibles después de que la tubería está lista.

Otra es que está llamando a leer dos veces: esto podría ser útil si quiere omitir cualquier otra línea, pero eso es un poco inusual.

El último es que min=a establece min a a, literalmente. Desea configurarlo en $a.

Usando process substitution para deshacerse del primer problema, la eliminación de la segunda lectura (posiblemente) un-necesario, y la fijación de las asignaciones, el código debe ser similar:

max=0 
min=20000000 
while read a 
do 
    if [[ $a -gt $max ]] 
    then 
     max=$a 
    fi 
    if [[ $a -lt $min ]] 
    then 
     min=$a 
    fi 
done < <(cat) # careful with the syntax 
echo $max 
echo $min 

+0

ahhhh Gracias, ahora entiendo esto. Gracias :) – pkruk

+1

Cuarto problema: palos de fondo no motivados en el medio del guión, no explicables por un error de principiante. :) –

+0

@userunknown: Supuse que esos eran el resultado de una pelea con el editor de rebajas, no presente en el código :) – Mat

Cuestiones relacionadas