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í.
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í.
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
).
Dado que bash tiene sintaxis para especificar la base numérica, ¿por qué no demostrarlo aquí (aunque con una salvedad de portabilidad)? –
Puede convertir base: 'echo $ ((d1-10 # $ d2))' Tenga cuidado: no es lo mismo que 'echo $ ((d1-10 # d2))' – Luchostein
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.
qwarentine significa shell de Linux. –
La pregunta es para el shell de Unix – rashok
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
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' –
@WilliamPursell Interesante ... Tendré que analizar esto, información útil, gracias. – Levon
Puede hacerlo directamente con Bash puro: 'echo $ ((d1-10 # $ d2))' – Luchostein
let d=d1-d2;echo $d;
Esto debería ayudar.
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
¿Desea esto desde la línea de comandos o programáticamente? – Levon