Gracias, chicos por los aportes...
Me deja tranquilo que tan errado no estaba...
a) Ya se entendio lo de $'\n'...ahi estuve leyendo el man bash...debere
leerlo mas detalladamente...pasa q a veces, un man muy largo "asusta",
jaja...
b) Ok, me queda claro que el IFS, si lo toco, luego debo volver a dejarlo
como estaba...
c) Leo: un detalle
Maxi Curia me habia sugerido:
echo "$MILISTA" | while read line; do
echo "$line"
done
Y vos acotabas que:
"Nota que eso tambien requiere IFS=$'\n' antes del while, o va a separar
palabras en espacios tambien. "
Sabes q no necesariamente...pues el read si recibe una sola variable, te
deja todas las palabras en la misma, hasta encontrar el newline...o sea, un
read LINEA es como un "readline"...
d) A proposito del punto anterior: Maxi, sabes q eso lo habia probado, pero
me sucede algo muy raro (o bien, algo que no puedo entender por que es que
sucede).
Fijense este ejemplo:
##########################################
#!/bin/bash
MILISTA=$(find /home/mmilicich -maxdepth 1 -type f)
STRING=''
echo "$MILISTA" | while read LINE ; do
STRING="$STRING -- $LINE"
echo "$STRING"
done
echo "STRING FINAL: $STRING"
##########################################
Cuando sale del while, la variable $STRING me sale vacia (es decir, como
antes de empezar)...
Es como que lo q le agrego a $STRING dentro del while, una vez q termina
deja de tener efecto....
Como si se abriera un proceso hijo...
Y no entiendo !!!!!
=(
Bueno, gracias por la paciencia, son mis primeros pasos en el shellscripting
Saludos!!
MA_Xx
2009/5/25 Leonardo Mosquera <[email protected]>
> 2009/5/25 Maximiliano Curia <[email protected]>
>
>> Hola Maximiliano Milicich!
>>
>> El 25/05/2009 a las 05:45 escribiste:
>> > Hola, a ver quien me puede orientar con esto...
>>
>> > Ando practicando shellscripting en Linux (en BASH) y tengo el
>> siguiente
>> > desafio:
>>
>> > Tengo una variable que aloja una lista de strings separados por
>> newlines.
>> > Los strings podrian contener espacios en blanco...
>>
>> > Por ejemplo:
>> >
>> > MILISTA=$(find /algunlugar -type f)
>>
>> > a) Como puedo recorrer los elementos de MILISTA ?
>>
>> > En ppio el "for A in $MILISTA" separa por espacios y no por
>> newlines...
>>
>> > googleando encontre que se puede cambiar la variable de ambiente
>> "IFS"
>> > para definir el separador que usar el for, asi
>>
>> > IFS=$'\n'
>> > for A in $MILISTA ; do
>> > echo $A
>> > done
>>
>> IFS es bastante especial, si lo cambias y pretendes seguir operando con
>> cosas
>> separadas por campos es probable que te convenga volverlo al valor
>> anterior.
>>
>> > Esto funciona ok, pero...hay alguna manera mas intuitiva de hacerlo
>> ??
>>
>> Para cierto valor de "intuitivo", si:
>>
>> echo "$MILISTA" | while read line; do
>> echo "$line"
>> done
>
>
> Nota que eso tambien requiere IFS=$'\n' antes del while, o va a separar
> palabras en espacios tambien.
>
> Cuando bash interpreta expresiones ("variable expansion" segun descripto en
> el man de bash), a lo ultimo separa la expresion en "palabras", usando como
> separador todos los caracteres contenidos en IFS.
> Por defecto IFS tiene el espacio, el tab y el newline; por eso cualquier
> cosa que evalues se corta en espacios y no sirve para trabajar de a lineas,
> por ejemplo con la salida de un comando o las lineas de un archivo.
>
> La unica forma que tenes de evitar separar en espacios, es redefiniendo IFS
> para sacar el caracter espacio; no hay una forma tacita de hacerlo que yo
> sepa. Pero tampoco es tan criptico si lo pensas.
>
>
>> > b) NO ENTIENDO COMO ES QUE SE INTERPRETA $'\n' !!!!! =(
>> > Es decir...funciona, pero....que demonios es $'\n' ??
>>
>> Es la forma tradicional de representar el caracter nueva linea (byte 10).
>>
>
> Agrego algo: si te fijas en man bash, esa es una notacion para introducir
> caracteres no imprimibles en una expresion.
> En C tenes, entre otros, los siguientes caracteres especiales: \n \t etc.
> Bash te deja usarlos con esa tal notacion $'C', donde C es el caracter
> especial.
> Eso tampoco es tan criptico una vez que lo entendes (aunque ojala lo
> hubieran hecho mas facil de tipear).
>
>
>
> _______________________________________________
> Lista de correo Programacion.
> [email protected]
> http://listas.fi.uba.ar/mailman/listinfo/programacion
>
>
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion