我正在創建一個計算圓面積的程式,但由于標題中出現錯誤資訊,bash無法編譯和執行。以下是我的代碼:
elif [ $num -le 6 ] & & [ $num -ge 4 ] 。
then
讀 -p "輸入半徑。" radius
let areaCirc=("scale=2;3.1416 * ($radius * $radius)"/span>|bc)
echo "圓的面積是。" $areaCirc
而錯誤資訊是。 在意外標記'|'附近出現語法錯誤
有人能幫助我嗎?
uj5u.com熱心網友回復:
- 要通過stdin向命令發送一個字串,請使用here-string
command <<< string,而不是管道。 - 命令替換語法是
$(...),而不是(...)。 - 這里不要使用
let。Shell算術只支持整數。
areaCirc=$(bc <<< "scale=2;3.1416 * ($radius * $radius) "/span>)
uj5u.com熱心網友回復:
let提供了算術背景關系,但是我們在這里有一個歧義,因為在let運算式中,豎條(|)意味著bitwise or,但是在shell中它也有管道運算子的意思。請看下面的例子:
let bc=4
let a=(4 bc) # Set a to 8
let b=("5 bc") # Sets b to 9.
let c=("(2 4)|bc")
這在語法上是正確的,并將c設定為6(因為2 4等于6,而6和4的位法or等于6)。
然而,如果我們決定只參考引數的一部分,即:
let c=("(2 4)"|bc)
或者根本就不參考,即
let c=((2 4)|bc)
我們得到一個語法錯誤。原因是shell在決議一個命令時,首先將其分離成不同的命令,然后將其串聯起來。pipe就是這樣一個運算子,shell認為你想做一個let areaCirc=("scale=2;3.1416 * ($radius * $radius)",并將結果用管道送入bc。正如你所看到的,let陳述句是不完整的;因此出現語法錯誤。
除此之外,即使你能解決這個問題,你使用的let也不會起作用,因為你使用的是一個小數(3.1416),而let只能進行整數運算。作為一種變通方法,你可以使用bc,或其他語言(awk,perl,...)進行整個計算,或者,如果這是一種選擇,你可以從bash切換到zsh,在shell中可以進行浮點運算。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/308005.html
標籤:
