2012-06-29 21 views

risposta

33

La soluzione standard:

expr $d1 - $d2 

È anche possibile fare:

echo $((d1 - d2)) 

ma fate attenzione che questo tratterà 07 come un numero ottale! (quindi 07 corrisponde a 7, ma 010 è diverso da 10).

+1

Dato che bash ha la sintassi per specificare la base numerica, perché non dimostrarlo qui (anche se con un avvertimento sulla portabilità)? –

+1

Puoi convertire base: 'echo $ ((d1-10 # $ d2))' Attenzione: non è la stessa di 'echo $ ((d1-10 # d2))' – Luchostein

-4

Usare questo:

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

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

ecc

+2

qwarentine significava shell Linux. –

+0

Domanda per unix shell – rashok

14

Qualsiasi di questi lavoreranno dalla riga di comando shell. bc è probabilmente la soluzione più semplice in assoluto.

Utilizzando bc:

$ echo "$d1 - $d2" | bc 

Utilizzando awk:

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

Utilizzando perl:

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

Utilizzando Python:

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

restituiscono tutte

4 
+1

Non sono sicuro se si tratti di un bug o di una funzione di 'expr',' awk', 'bc' e' dc', ma tutti questi strumenti gestiscono il caso 'd1 = 09' trattando 09 come valore decimale 9. Tuttavia, 'perl' e' python' lo trattano come un errore di sintassi. Si ottengono risultati diversi per il caso 'd1 = 010' –

+0

@WilliamPursell Interessante .. Dovrò esaminare questo, informazioni utili, grazie. – Levon

+1

Puoi farlo subito con puro Bash: 'echo $ ((d1-10 # $ d2))' – Luchostein

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

Questo dovrebbe aiutare.

+0

Questo è effettivamente lo stesso come 'd = $ ((d1 - d2)); echo "$ d" ', come coperto dalla risposta accettata (con la stessa avvertenza che i numeri prefissati da' 0' sono interpretati come _octals_). – mklement0

Problemi correlati