Bash
Matematik
Sök…
Matematik med hjälp av DC
dc
är ett av de äldsta språken på Unix.
Det använder omvänd polermärkning , vilket innebär att du först staplar siffror och sedan operationer. Till exempel är 1+1
skrivet som 1 1+
.
För att skriva ut ett element från toppen av bunten använder du kommando p
echo '2 3 + p' | dc
5
or
dc <<< '2 3 + p'
5
Du kan skriva ut det översta elementet många gånger
dc <<< '1 1 + p 2 + p'
2
4
För negativa siffror använd _
prefix
dc <<< '_1 p'
-1
Du kan också använda stora bokstäver från A to F
för siffror mellan 10 and 15
och .
som en decimal
dc <<< 'A.4 p'
10.4
dc
använder obegränsad precision vilket innebär att precisionen endast begränsas av det tillgängliga minnet. Som standard är precisionen inställd på 0 decimaler
dc <<< '4 3 / p'
1
Vi kan öka precisionen med kommandot k
. 2k
kommer att använda
dc <<< '2k 4 3 / p'
1.33
dc <<< '4k 4 3 / p'
1.3333
Du kan också använda den över flera rader
dc << EOF
1 1 +
3 *
p
EOF
6
bc
är en förbehandlare fördc
.
Matematik med hjälp av bc
bc
är ett godtyckligt precisionskalkylarspråk. Det kan användas interaktivt eller köras från kommandoraden.
Till exempel kan det skriva ut resultatet av ett uttryck:
echo '2 + 3' | bc
5
echo '12 / 5' | bc
2
För aritmetik med flytande post kan du importera standardbiblioteket bc -l
:
echo '12 / 5' | bc -l
2.40000000000000000000
Det kan användas för att jämföra uttryck:
echo '8 > 5' | bc
1
echo '10 == 11' | bc
0
echo '10 == 10 && 8 > 3' | bc
1
Matematik med bash-funktioner
Aritmetisk beräkning kan också göras utan att involvera andra program som detta:
Multiplikation:
echo $((5 * 2))
10
Division:
echo $((5 / 2))
2
modulo:
echo $((5 % 2))
1
exponentiering:
echo $((5 ** 2))
25
Matematik med expr
expr
eller Evaluate expressions
utvärderar ett expression och skriver resultatet på standard output
Grundläggande aritmetik
expr 2 + 3
5
När du multiplicerar måste du undgå *
-tecknet
expr 2 \* 3
6
Du kan också använda variabler
a=2
expr $a + 3
5
Tänk på att det bara stöder heltal, så uttryck som detta
expr 3.0 / 2
kommer att kasta ett fel expr: not a decimal number: '3.0'
.
Det stöder regelbundet uttryck för att matcha mönster
expr 'Hello World' : 'Hell\(.*\)rld'
o Wo
Eller hitta indexet för den första rösten i söksträngen
Detta kommer att kasta
expr: syntax error
på Mac OS X , eftersom det använder BSD expr som inte har indexkommandot, medan expr på Linux generellt är GNU expr
expr index hello l
3
expr index 'hello' 'lo'
3