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

Re: Bash



César Rincón escribió:
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.


Gracias ahora ya esta solucionado por fin. xD total solo era cambiar la llamada (llamar sin comillas) y sustituir $* por "$@" Gracias de nuevo.

--
Si se encuentra bien, no se preocupe. Se le pasará. [POSTULADO DE BOLING.]



Reply to: