bash算術求值和errexit陷阱

2021-09-08 18:05:51 字數 562 閱讀 8099

原文:

在 "traps for new players" 一章:

count

=0things

="0 1 0 0 1"

for i in $things;

doif[$i

=="1"

]; then

(( count++ ))

fidone

echo

"count is $"

看上去非常正常?

我可能已經這麼寫好多次了。

但這是乙個意想不到的錯誤:

((expression))

表示式按 arithmetic evaluation 描寫敘述的規則求值. 假設表示式的值非0。返回值為0; 否則返回值是1. 這個和let "expression"是同樣的.

當你使用

-e或使能errexit

執行該指令碼時 -- 或許是因為指令碼過大而變的不可信 -- count++ 將返回 0 (post-increment) 然後指令碼就退出了. 這個陷阱須要注意!

bash的算術運算和條件測試語句

shell指令碼程式設計 利用bash指令碼程式設計實現算數運算 模運算 取餘 乘方 增強型算術運算符號 let b b 1 let b 1 特殊的增強型算術運算 b b 1 b 1 b 算數運算方法 1.let var 算數表示式 將算數表示式先行進行算數運算,並將運算得到的結果儲存到變數var中...

簡單算術表示式求值

題目 利用cin,getline將輸入分成前半部分和後半部分,便於操作 例如 32 3 分成數字部分 32字串部分 3 include using namespace std intmain re num n break else if s i re n num break else if s i ...

簡單算術表示式求值

兩位正整數的簡單算術運算 只考慮整數運算 算術運算為 加法運算 減法運算 乘法運算 整除運算 取餘運算。算術表示式的格式為 運算子前後可能有空格 運算數 運算子 運算數請輸出相應的結果。一行算術表示式。整型算數運算的結果 結果值不一定為2位數,可能多於2位或少於2位 32 64 96 include...