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ör dc .

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 errorMac 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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow