2012-06-29 25 views

Odpowiedz

33

standardowe rozwiązanie:

expr $d1 - $d2 

Można również zrobić:

echo $((d1 - d2)) 

ale uważaj, że będzie to traktować 07 jako liczba ósemkowa! (więc jest taki sam jak 7, ale 010 jest inny niż 10).

+1

Biorąc pod uwagę, że bash ma składnię do określania bazy numerycznej, dlaczego nie ma jej tutaj zademonstrować (aczkolwiek z zastrzeżeniem przenośności)? –

+1

Możesz dokonać konwersji bazowej: 'echo $ ((d1-10 # $ d2))' Uwaga: nie jest to to samo co 'echo $ ((d1-10 # d2))' – Luchostein

-4

Użyj tego:

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

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

itp

+2

qwarentine oznaczało powłokę Linux. –

+0

Pytanie dotyczy powłoki unixowej – rashok

14

Każda z nich będzie działać z linii poleceń powłoki. bc to prawdopodobnie najprostsze rozwiązanie.

Stosując bc:

$ echo "$d1 - $d2" | bc 

Stosując awk:

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

Stosując perl:

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

Stosując Python:

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

wszystko wrócić

4 
+1

Nie jestem pewien, czy jest to błąd, czy funkcja 'expr',' awk', 'bc' i' dc', ale wszystkie te narzędzia obsługują przypadek 'd1 = 09' poprzez traktowanie 09 jako wartość dziesiętna 9. Jednak 'perl' i' python' traktują to jako błąd składni. Otrzymujesz różne wyniki dla sprawy 'd1 = 010' –

+0

@WilliamPursell Interesujące .. Będę musiał zagłębić się w to, użyteczne informacje, dziękuję. – Levon

+1

Możesz zrobić to od razu z czystym Bash: 'echo $ ((d1-10 # $ d2))' – Luchostein

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

To powinno pomóc.

+0

To jest faktycznie to samo jako 'd = $ ((d1 - d2)); echo "$ d" ', które obejmuje zaakceptowana odpowiedź (z tym samym zastrzeżeniem, że liczby z prefiksem" 0 "są interpretowane jako _octals_). – mklement0

Powiązane problemy