Linux/Unix Shell Scripting - Encontrar el error

 
Vista:

Encontrar el error

Publicado por Jose Duarte (8 intervenciones) el 27/02/2007 14:06:29
Cuando ejecuto concatenar, en lugar de retornar "2120" me retorna 72. Favor ayudenme a encontrar el error. Gracias.

# funciones
function concatenar() {
c=$1$2
return $c
}

# principal
. funciones
concatenar 21 20
valor=$?
echo $valor
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Encontrar el error

Publicado por Tom (353 intervenciones) el 27/02/2007 14:39:38
Estás mezaclando churras con merinas.
El valor de retorno de una función no se usa para eso.
A ver, 2120 es 848 en hexadecimal y 48 en hexadecimal es 72 en decimal. ¿te das cuenta? ¡¡ el valor de retorno de una función es un número entre 0 y 255 !! (lo has tenido que leer en el manual de bash).

echo $c
}

valor=$(concatenar 21 20)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Encontrar el error

Publicado por Jose Duarte (8 intervenciones) el 27/02/2007 14:45:55
OK, entonces segun tu sabia explicacion, no podemos crear una funcion que me retorne un string, porque todos aquellos que me retornaban un valor numerico y que no devolvian valores no tenian ese problema
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Encontrar el error

Publicado por Tom (353 intervenciones) el 27/02/2007 18:55:38
No, en shell, el valor de retorno de una función o de un ejecutable es un número, concretamente un byte. Siempre.
Infórmate, por ejemplo leyendo el manual:
man -a return
y
man -a exec

Y, para que te convenzas:

~$ medio() {
> return "perico"
> }
~$ medio
-bash: return: perico: numeric argument required
~$

Esto es así, porque en Unix el valor de retorno de un proceso es una variable entera que se usa para dar una mínima información sobre la ejecución del proceso. (Normalmente se asume que un proceso que retorna 0 ha finalizado correctamente).

Para simular lo que necesitas, se usa el método que te escribí en el anterior post. Utilizar la stdout.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar