[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Bash



Jaume Martin Claramonte wrote:
> quiero hacer esto:
> 
> for nom in "$@" # esto es lo que me ha aconsejado Cesar
>   do
>   nom=../`echo $nom | tr ' ' '_'` # esto no se hace correctamente
>   echo "$nom" # imprime ../capitulo-* cuando debería
> ser:                       # ../capitulo-1_de_la_serie.avi

Ah.  Tu problema, me parece, es que estás reasignando la variable "nom"
con una expresión que usa su valor anterior.  Prueba cambiar "for nom" a
"for i", por ejemplo (y sí, esto es una irritante "gotcha" de bash)

Incidentalmente, eso que haces, de evitar con comillas la expansión del
patrón en la línea de comandos, es inusual.  Si tienes una razón para
ello, pues adelante, no dije nada.  Pero te sugeriría dejar que la
consola expanda el patrón. Es su trabajo, y lo hace bien.

Por ejemplo, este código,

------------------------------------
#! /bin/bash

for i in "$@"; do
    nom=`echo "$i" | tr ' ' '_'`
    echo "\"$nom\""
done
------------------------------------

debería hacer lo que quieres.  La invocación es sin comillas:

$ dvd.sh capitulo-*

de forma que recibes como parámetros los nombres ya expandidos.  Esto es
más fácil de programar, más tradicional en UNIX, y más flexible.

-- 
César Rincón
http://mengambrea.blogspot.com/



Reply to: