Foros del Web » Administración de Sistemas » Unix / Linux »

Escapar asterisco en la shell

Estas en el tema de Escapar asterisco en la shell en el foro de Unix / Linux en Foros del Web. Hola a todos, tengo este trozo de condigo el cual me cuenta la longiud de una cadena y la recorro para poder comparar cada caracter ...
  #1 (permalink)  
Antiguo 25/04/2012, 20:45
 
Fecha de Ingreso: abril-2011
Ubicación: Alicante
Mensajes: 52
Antigüedad: 13 años
Puntos: 3
Escapar asterisco en la shell

Hola a todos, tengo este trozo de condigo el cual me cuenta la longiud de una cadena y la recorro para poder comparar cada caracter y poder saber cuantos asteriscos tiene la cadena introducida por parametro.

Este es el codigo:

Código:
case $1 in
-name)
	#busco un nombre completo y no acepto expresiones regulares

	longitudC=${#2}  #almaceno longitud de la cadena
	caracter="*"
	i=0
	numAst=0
	echo $caracter
	echo $longitudC
	for i in {0..$longitudC} #recorro la cadena
	do 
		echo $i
		if [ $i==$caracter ] #si contenido 
		then
			echo "he entrado" $i "veces"
			let numAst=numAst+1 #sumo numero asteriscos
		fi
	done
	echo $numAst
;;
esac
Y este es el resultado de su ejecucion:

User-Capixi:~$ ./prueba.sh -name Docu**me*
Baixades buscar02.sh buscarFind.sh Desktop Documents Downloads hola.sh Imatges Música prueba.sh UserFiles Vídeos
9
{0..9}
he entrado {0..9} veces
1

Como veis el caso es que no me compara nada porque me sustituye el * por el listado de el directorio actual.

Como puedo hacer para escapar el asterisco?
Estoy comparando las cadenas de manera correcta?
  #2 (permalink)  
Antiguo 25/04/2012, 20:59
 
Fecha de Ingreso: diciembre-2011
Mensajes: 134
Antigüedad: 12 años, 3 meses
Puntos: 5
Respuesta: Escapar asterisco en la shell

después de ver esto ya puedo irme a dormir y asumir que quizás el año que viene apruebo esta asignatura.


responded a la chica si lo sabéis, este mensaje era algo fuera del tema y que nada tiene que ver con la pregunta.
  #3 (permalink)  
Antiguo 26/04/2012, 01:04
Avatar de crakeador  
Fecha de Ingreso: abril-2012
Ubicación: Munich
Mensajes: 52
Antigüedad: 12 años
Puntos: 7
Respuesta: Escapar asterisco en la shell

No soy un experto en script (mas bien poca idea) pero parece ser que tu argumento lo interpreta irregularmente. Prueba a ejecutarlo de otra forma

sudo sh prueba.sh < Document***
__________________
Vini, Vidi, Installi
  #4 (permalink)  
Antiguo 26/04/2012, 08:49
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Escapar asterisco en la shell

Es simple: cualquier shell de UNIX (y por extensión, de Linux) expande los * de la línea de comandos, sustituyendo los argumentos que encuentre por los nombres de archivo que coincidan. Eso es normal y esperable, de hecho gracias a este comportamiento es que funcionan cosas como "ls -l *"

Si querés evitar esto, tendrás que entrecomillar los argumentos del script, pasando "Docu**me*" en vez de Docu**me*.


Otra cosa: No conozco la sintaxis {min..max} para la shell (aunque sé que BASH tiene construcciones que no conozco). Creo que no es correcto y de hecho no te funciona, fíjate que $i tiene el valor {0..9} dentro del for, lo cual es un indicio claro de que la sintaxis no es reconocida.

Si me preguntas, creo que tu script es tan sencillo como

Código BASH:
Ver original
  1. echo -n $1 |tr -dc '*' |wc -c


Saludos.

Etiquetas: asterisco, escapar, shell
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:56.