Jeśli napiszę następujące w terminalu bash:
A="0012"
B=$((A+1))
echo $B
Dostaję 11, a nie 13, jak się spodziewałem !!!!!
Poszukałem w Google i nie mogę tego w ogóle wyjaśnić, ani wymyślić, jak mogę zwiększyć liczbę. (Właściwie chcę skończyć na B = „0013” i zwiększać jeden za każdym razem, ponieważ używam tego jako prefiksu moich kopii zapasowych)
Odpowiedzi:
Dzieje się tak, ponieważ liczby zaczynające się od
0
są traktowane jako Liczby ósemkowebash
, stąd dodaje się Liczbę ósemkową (Podstawa 8). Aby uzyskać dodawanie dziesiętne dla tej struktury, musisz jawnie zdefiniować Podstawę lub00
całkowicie nie używać .W przypadku wartości dziesiętnych podstawą jest 10, oznaczona przez
10#
:źródło
Możesz spróbować użyć tego polecenia, aby uzyskać odpowiedź:
Więcej informacji o
bc
poleceniu można znaleźć tutaj .bc
strona podręcznika:źródło
echo
i potoku, możesz użyć składni „tu string” Basha. Efekt jest taki sam, ale IMHO „ciąg tutaj” jest piękniejszy:bc <<< "$A + 1"
:-)bc
opróczhere
linku.Alternatywną metodą może być zachowanie zmiennych jako liczb całkowitych i przekonwertowanie ich na ciąg znaków na końcu:
Ten styl pracy z liczbami całkowitymi w matematyce i konwersji na ciąg znaków w celu uzyskania odpowiedzi jest dla mnie bardziej intuicyjny, ponieważ jestem przyzwyczajony do programowania w języku BASIC. Rozumiem, że Bash nie ma takich zmiennych jak C i BASIC, ale udawanie, że to robi, sprawia, że jestem szczęśliwy.
źródło
A="0012"; A=$((10#$A))