2012-06-29 22 views
19

Tengo d1="11" y d2="07". Quiero convertir d1 y d2 en enteros y realizar d1-d2. ¿Cómo hago esto en UNIX?Cómo convertir cadena a entero en UNIX

d1 - d2 Actualmente devuelve "11-07" como resultado para mí.

+3

¿Desea esto desde la línea de comandos o programáticamente? – Levon

Respuesta

33

La solución estándar:

expr $d1 - $d2 

También puede hacer:

echo $((d1 - d2)) 

pero ten en cuenta que esto va a tratar 07 como un número octal! (Entonces 07 es lo mismo que 7, pero 010 es diferente de 10).

+1

Dado que bash tiene sintaxis para especificar la base numérica, ¿por qué no demostrarlo aquí (aunque con una salvedad de portabilidad)? –

+1

Puede convertir base: 'echo $ ((d1-10 # $ d2))' Tenga cuidado: no es lo mismo que 'echo $ ((d1-10 # d2))' – Luchostein

-4

Utilice esta:

#include <stdlib.h> 
#include <string.h> 

int main() 
{ 
    const char *d1 = "11"; 
    int d1int = atoi(d1); 
    printf("d1 = %d\n", d1); 
    return 0; 
} 

etc.

+2

qwarentine significa shell de Linux. –

+0

La pregunta es para el shell de Unix – rashok

14

Cualquiera de estos trabajar desde la línea de comandos shell. bc es probablemente la solución más directa.

Usando bc:

$ echo "$d1 - $d2" | bc 

Usando awk:

$ echo $d1 $d2 | awk '{print $1 - $2}' 

Usando perl:

$ perl -E "say $d1 - $d2" 

Usando Python:

$ python -c "print $d1 - $d2" 

toda la vuelta

4 
+1

No estoy seguro de si es un error o una característica de 'expr',' awk', 'bc' y' dc', pero todas esas herramientas manejan el caso 'd1 = 09' tratando 09 como el valor decimal 9. Sin embargo, 'perl' y' python' lo tratan como un error de sintaxis. Obtendrá resultados diferentes para el caso 'd1 = 010' –

+0

@WilliamPursell Interesante ... Tendré que analizar esto, información útil, gracias. – Levon

+1

Puede hacerlo directamente con Bash puro: 'echo $ ((d1-10 # $ d2))' – Luchostein

0
let d=d1-d2;echo $d; 

Esto debería ayudar.

+0

Esto es efectivamente lo mismo como 'd = $ ((d1 - d2)); echo "$ d" ', como está cubierto por la respuesta aceptada (con la misma advertencia de que los números con prefijo' 0' se interpretan como _octals_). – mklement0

Cuestiones relacionadas