2012-10-11 50 views
5

No puedo obtener printf para imprimir una variable con el descriptor% e en una secuencia de comandos bash. Se acaba de decirError inexplicable en bash: el comando printf dentro de una secuencia de comandos devuelve "número inválido"

#!/bin/bash 
a=14.9 
printf %e 14.9; 

Sé que esto es probablemente una pregunta muy fácil, pero soy bastante nuevo para golpear y siempre utilizado echo. Además, no pude encontrar una respuesta en ningún lado.


cuando se ejecuta me sale

$ ./test.text 
./test.text: line 3: printf: 14.9: invalid number 
0,000000 

por lo tanto, mi problema es el LC_NUMERIC variable de configuración regional: se establece de modo que yo uso comas como separadores decimales. De hecho, se establece en una localización europea:

$ locale | grep NUM 
LC_NUMERIC="it_IT.UTF-8" 

pensé que me puse a en_US.UTF-8, pero, evidentemente, no lo hice. Ahora el problema cambia para encontrar cómo configurar mi variable locale. Simplemente usando

$ LC_NUMERIC="en_US.UTF-8" 

no funcionará.

+4

¿Qué obtienes? Funciona bien aquí ... –

+0

Si bien el código funciona bien aquí (resultado 1.490000e + 01), esta página http://linuxconfig.org/bash-printf-syntax-basics-with-examples indica que el% e podría/debe colocarse dentro de las comillas. Es decir, printf "% e" 14.9; – enhzflep

+0

@enhzflep: gracias, pero el problema no es eso. No necesita poner argumentos de printf entre comillas dobles, a menos que los argumentos en sí no lo necesiten. Además, funciona sin ellos de todos modos. Puedo establecer la variable con $ export LC_NUMERIC = "en_US.UTF-8" pero esto no es permanente. ¿Cómo puedo hacer que sea permanente? Yo manejo Cygwin. –

Respuesta

8

Este:

LC_NUMERIC="en_US.UTF-8" printf %e 14.9 

conjuntos $LC_NUMERIC sólo durante la duración de aquel comando.

Este:

export LC_NUMERIC="en_US.UTF-8" 

conjuntos $LC_NUMERIC sólo para la duración del proceso de shell actual.

Si agrega

export LC_NUMERIC="en_US.UTF-8" 

a su $HOME/.bashrc o $HOME/.bash_profile, se establecerá $LC_NUMERIC para todas las conchas de bash que poner en marcha.

Busque el código existente que establece $LC_NUMERIC en su .bashrc u otros archivos de inicio de shell.

+0

¡Impresionante, trabajado como un encanto! –

2

Puede tener un problema de configuración regional y no esperaba un punto. Proveedores:

LC_NUMERIC="en_US.UTF-8" printf %e 14.9 
Cuestiones relacionadas