Mam d1="11"
i d2="07"
. Chcę przekonwertować d1
i d2
na liczby całkowite i wykonać d1-d2
. Jak to zrobić w systemie UNIX?Jak przekonwertować ciąg na liczbę całkowitą w systemie UNIX
d1 - d2
obecnie zwraca "11-07"
jako wynik dla mnie.
Mam d1="11"
i d2="07"
. Chcę przekonwertować d1
i d2
na liczby całkowite i wykonać d1-d2
. Jak to zrobić w systemie UNIX?Jak przekonwertować ciąg na liczbę całkowitą w systemie UNIX
d1 - d2
obecnie zwraca "11-07"
jako wynik dla mnie.
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
).
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)? –
Możesz dokonać konwersji bazowej: 'echo $ ((d1-10 # $ d2))' Uwaga: nie jest to to samo co 'echo $ ((d1-10 # d2))' – Luchostein
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
qwarentine oznaczało powłokę Linux. –
Pytanie dotyczy powłoki unixowej – rashok
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
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' –
@WilliamPursell Interesujące .. Będę musiał zagłębić się w to, użyteczne informacje, dziękuję. – Levon
Możesz zrobić to od razu z czystym Bash: 'echo $ ((d1-10 # $ d2))' – Luchostein
let d=d1-d2;echo $d;
To powinno pomóc.
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
Czy chcesz to z linii poleceń lub programowo? – Levon