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 errorpå 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