Używam terminala szeregowego, aby zapewnić dane wejściowe do naszego eksperymentu laboratoryjnego. Znalazłem to za pomocą
$ echo "5X5"
po prostu zwraca ciąg "5X5"
. Czy istnieje polecenie wykonania operacji mnożenia?
źródło
Używam terminala szeregowego, aby zapewnić dane wejściowe do naszego eksperymentu laboratoryjnego. Znalazłem to za pomocą
$ echo "5X5"
po prostu zwraca ciąg "5X5"
. Czy istnieje polecenie wykonania operacji mnożenia?
Tak, możesz użyć wbudowanego rozszerzenia arytmetycznego basha,$(( ))
aby wykonać proste obliczenia
$ echo "$((5 * 5))"
25
Sprawdź sekcję Arytmetyka powłoki w podręczniku Bash Reference Manual, aby uzyskać pełną listę operatorów.
Ze względu na kompletność, jak wskazali inni, jeśli potrzebujesz dowolnej precyzji bc
lub dc
byłoby lepiej.
Aby uzyskać bardziej zaawansowaną i precyzyjną matematykę, rozważ użycie bc (1).
echo "3 * 2.19" | bc -l
6.57
Bash obsługuje ekspansję arytmetyczną z $(( expression ))
. Na przykład:
$ echo $(( 5 * 5 ))
25
Szereg narzędzi zapewnia funkcje arytmetyczne, w tym bc i expr .
$ echo '5 * 5' | /usr/bin/bc
25
$ /usr/bin/expr 5 \* 5
25
Klasyczne rozwiązanie to:
expr 5 \* 5
Inną fajną opcją jest:
echo 5 5\*p | dc
Oba te rozwiązania będą działać tylko z operandami całkowitymi.
dc
działa z pływakami. Spróbujecho '4 k 50 7 / p' | dc
. Wynik jest7.1428
.k
Polecenie ustawia precyzję.k
. Z pewnością pamiętam domyślną dokładność równą 0 (obcięcie do liczby całkowitej). Czy źle pamiętam, czy po prostu nowsze implementacje zmieniły zachowanie?dc
Przez lata używałem rzadko, ponieważ jestem bardziej algebraiczny i mniej RPN, więc nie pamiętam. W systemie GNU, którego używam, wartością domyślną jest 0. Stara (1993)man
strona FreeBSD wspomina, że domyślną wartością jest zero, ale starszeman
strony BSD nie.echo '4 k 50.5 7 / p' | dc
działa (wyjście:)7.2142
.Prosta funkcja powłoki (bez seda) powinna załatwić sprawę interpretacji „5X5”
źródło
Używam tej funkcji, która używa
bc
i tym samym obsługuje obliczenia zmiennoprzecinkowe:Przykład:
Rozwinięcie arytmetyczne Basha nie obsługuje pływaków (ale powłoka Korna i zsh tak).
Przykład:
źródło
Mam do tego prosty skrypt:
me@mycomputer:~$ cat /usr/local/bin/c
Zmienia się
x
na,*
ponieważ*
jest to znak specjalny w powłoce. Użyj go w następujący sposób:c 5x5
c 5-4.2 + 1
c '(5 + 5) * 30'
(nadal musisz używać cudzysłowów, jeśli wyrażenie zawiera nawiasy).źródło
tr
może służyć do mapowania znaków dla wielu znaków.Jeśli lubisz Pythona i masz możliwość zainstalowania pakietu, możesz użyć tego narzędzia, które stworzyłem.
źródło