Tính toán biến và xuất nó sang biến khác


10

Máy tính duy nhất tôi biết là bc. Tôi muốn thêm 1vào một biến và xuất ra một biến khác.

Tôi đã nhận được nextnumbiến từ đếm chuỗi trong một tập tin:

nextnum=`grep -o stringtocount file.tpl.php | wc -w`

Hãy nói rằng nextnumgiá trị là 1. Khi được thêm vào 1, nó sẽ trở thành 2. Để tính toán, tôi chạy:

rownum=`$nextnum+1 | bc`

nhưng có lỗi:

1+1: command not found

Tôi chỉ thất bại trong phần tính toán. Tôi đã thử thay đổi backtick nhưng vẫn không hoạt động. Tôi không biết làm thế nào để tính toán các biến và xuất nó sang một biến khác.


Câu trả lời:


21

Chuỗi con bên trong ` `phải là một lệnh hợp lệ:

rownum=`echo $nextnum+1 | bc`

Nhưng tốt hơn là sử dụng $( )thay vì ` `:

rownum=$(echo $nextnum+1 | bc)

Nhưng không cần bc, shell có thể thực hiện số học số nguyên :

rownum=$((nextnum+1))

Hoặc thậm chí đơn giản hơn trong bashksh:

((rownum=nextnum+1))

8

Bạn cũng có thể sử dụng số học tích hợp trong bash:

rownum=$((nextnum+1))

sẽ nhanh hơn một chút


2

Hoàn toàn đúng và hoàn thành các giải pháp được đề xuất, chỉ cần đề cập đến cách nó phải được thực hiện trong thời gian trước đây khi chỉ có Bourne-Shell có sẵn, đó là cách nó thích:

rownum=`expr $nextnum + 1` 

1

Tôi sẽ sử dụng (như đã được đề cập trước đó) rownum=$((nextnum+1))hoặc ((rownum=nextnum+1))nhưng nếu bạn thích một lệnh tiêu chuẩn, bạn có thể sử dụng lệnh let, nhưlet rownum=$nextnum+1


1
Gọi letmột lệnh chuẩn của người Viking là rất sai lệch. $((…))là cú pháp chuẩn (POSIX) trong khi đó letlà phần mở rộng ksh (và bash, zsh).
Gilles 'SO- ngừng trở nên xấu xa'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.