2010-03-02 8 views

risposta

9

bash non supporta galleggianti, uso awk o BC/dc

esempio awk

totalmark=$(awk 'BEGIN{print $sum/$subjects}') 

o BC

totalmark=$(echo "scale=2;$sum/$subjects"|bc) 

se avete il lusso di utilizzare diversi gusci diversi bash, provare zsh o ksh

$ zsh -c 'echo $((4/1.3))' 
3.0769230769230766 

$ ksh -c 'echo $((4/1.3))' 
3.07692307692307692 
+0

Non dimenticare 'perl -e' ... –

+1

e' python -c' e 'php -r' e .... – ghostdog74

+0

@ghostdog: Punto giusto, ma chi ha installato php sul proprio client? Beh, in effetti, vedo che è installato di default su Mac OS; Sono sicuro che Apple ha le sue ragioni ... –

5

Non credo che bash abbia funzionalità a virgola mobile. Potete provare:

echo "$sum/$subjects" | bc -l 
3

Bash non supporta l'aritmetica in virgola mobile. Prova invece a bc.

2
totalmark=$(echo "scale=4;$sum/$subjects"|bc) 

A proposito, tre risposte dicono che Bash non supporta l'aritmetica in virgola mobile. Mentre quello è vero, expr è un programma esterno (/usr/bin/expr per me) ed è quello, in particolare, in questo caso che non supporta i float.

+0

La GNU 'bc' ha 'scale = 0' di default, che il Q presumibilmente non vuole. Passa le opzioni '-lq'. –

+0

@Charles: Ecco perché ho specificato una scala di 4. Potrebbe essere qualsiasi cosa tu voglia. L'opzione '--mathlib' (' -l') fornisce un valore predefinito 'scale = 20' (almeno sul mio sistema con bc 1.06.94). L'opzione '--quiet' è comunque una buona idea. –

+0

Mi dispiace: non avevo notato che avevi trasmesso il compito nell'input: dovevo aver sognato ad occhi aperti. 'scale = 20' è un overkill spietato, ma le informazioni desiderate sono lì, e io tendo a preferire il rumore nell'output al rumore nello script della shell. –