2010-03-02 26 views

Trả lời

9

bash không hỗ trợ phao, sử dụng awk hoặc bc/dc

ví dụ awk

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

hoặc bc

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

nếu bạn có sự sang trọng để sử dụng vỏ khác ngoài bash, hãy thử zsh hoặc ksh

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

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

Đừng quên 'perl -e' ... –

+1

và' python -c' và 'php -r' và .... – ghostdog74

+0

@ghostdog: Điểm công bằng, nhưng ai đã cài đặt php trên máy khách của họ? Vâng, trên thực tế, tôi thấy rằng nó được cài đặt theo mặc định trên Mac OS; Tôi chắc chắn Apple có lý do của nó ... –

5

Tôi không nghĩ rằng bash có khả năng dấu phẩy động. Bạn có thể thử:

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

Bash không hỗ trợ số học dấu phẩy động. Thay vào đó, hãy thử bc.

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

Nhân tiện, ba câu trả lời cho biết Bash không hỗ trợ số học dấu phẩy động. Mặc dù điều đó là đúng, expr là một chương trình bên ngoài (/usr/bin/expr đối với tôi) và đó là chương trình đặc biệt, trong trường hợp này không hỗ trợ nổi.

+0

GNU 'bc' có 'scale = 0' theo mặc định, mà Q có lẽ không muốn. Chuyển các tùy chọn '-lq'. –

+0

@Charles: Đó là lý do tôi chỉ định thang điểm 4. Có thể là bất kỳ thứ gì bạn muốn. Tùy chọn '--mathlib' (' -l') cung cấp một mặc định là 'scale = 20' (ít nhất là trên hệ thống của tôi với bc 1.06.94). Tùy chọn '--quiet' là một ý tưởng hay. –

+0

Tôi xin lỗi: Tôi đã không nhận thấy bạn đã vượt qua bài tập trong đầu vào - tôi chắc đã mơ mộng. 'scale = 20' là overkill tàn nhẫn, nhưng các thông tin mong muốn là có, và tôi có xu hướng thích tiếng ồn trong đầu ra để tiếng ồn trong kịch bản shell. –

Các vấn đề liên quan