คำนวณตัวแปรและส่งออกไปยังตัวแปรอื่น


10

bcเครื่องคิดเลขเดียวที่ผมรู้ก็คือ ฉันต้องการเพิ่ม1ตัวแปรและส่งออกไปยังตัวแปรอื่น

ฉันได้รับnextnumตัวแปรจากการนับสตริงในไฟล์:

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

ช่วยบอกว่าค่าnextnum 1เมื่อเพิ่มเข้ามาด้วยก็จะกลายเป็น1 2ในการคำนวณฉันทำงาน:

rownum=`$nextnum+1 | bc`

แต่มีข้อผิดพลาด:

1+1: command not found

ฉันเพิ่งล้มเหลวในส่วนการคำนวณ ฉันลองเปลี่ยน backtick แล้วแต่ยังใช้งานไม่ได้ ฉันไม่ทราบวิธีการคำนวณตัวแปรและส่งออกไปยังตัวแปรอื่น


คำตอบ:


21

ซับสตริงภายใน` `ต้องเป็นคำสั่งที่ถูกต้อง:

rownum=`echo $nextnum+1 | bc`

แต่จะดีกว่าที่จะใช้$( )แทน` `:

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

แต่ไม่จำเป็นต้องbcใช้เชลล์สามารถทำเลขคณิตจำนวนเต็มได้ :

rownum=$((nextnum+1))

หรือง่ายยิ่งขึ้นในbashและksh:

((rownum=nextnum+1))

8

นอกจากนี้คุณยังสามารถใช้คณิตศาสตร์ในตัวใน bash:

rownum=$((nextnum+1))

ซึ่งจะเร็วขึ้นเล็กน้อย


2

คำแนะนำที่ถูกต้องและครบถ้วนสมบูรณ์เพียงแค่พูดถึงวิธีการที่จะต้องทำในอดีตเมื่อมีเพียง Bourne-Shell เท่านั้นที่มีอยู่นั่นคือวิธีที่มันชอบ:

rownum=`expr $nextnum + 1` 

1

ฉันจะใช้ (ตามที่กล่าวไว้ก่อนหน้านี้) rownum=$((nextnum+1))หรือ((rownum=nextnum+1))แต่ถ้าคุณต้องการคำสั่งมาตรฐานคุณสามารถใช้คำสั่ง let เช่นlet rownum=$nextnum+1


1
การเรียกlet“ คำสั่งมาตรฐาน” ทำให้เข้าใจผิดมาก $((…))เป็นไวยากรณ์มาตรฐาน (POSIX) ในขณะที่letเป็นส่วนขยาย ksh (และ bash, zsh)
Gilles 'หยุดความชั่วร้าย'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.