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.