有人可以解釋一下為什么會這樣,特別是我沒有在 if 陳述句中的變數名稱之前使用 '$' 字符這一事實嗎?我搜索了Bash 參考手冊,但找不到解釋。
#!/usr/bin/env bash
one="$1"
two="$2"
three="$3"
four="$4"
if [[ one -le two ]] && [[ three -ge four ]]; then
echo "TRUE: $one <= $two && $three >= $four"
else
echo "FALSE: $one <= $two && $three >= $four"
fi
我也用for x1 in {1..3}; do for x2 in {1..3}; do for x3 in {1..3}; do for x4 in {1..3}; do ./test $x1 $x2 $x3 $x4; done; done; done; done |sort它進行了測驗,它作業得很好。
uj5u.com熱心網友回復:
在的描述擊條件運算式算術比較運算子的描述(-lt,-gt等)表示:
當與 [[ 命令一起使用時,Arg1和Arg2被計算為算術運算式(請參閱Shell Arithmetic)。
當您點擊該鏈接時,它會說:
在運算式中,shell 變數也可以在不使用引數擴展語法的情況下按名稱參考。
算術擴展的描述——$((expression))說:
運算式中的所有標記都經過引數和變數擴展、命令替換和引號洗掉。... 根據下面列出的規則執行評估(請參閱殼牌演算法)。
uj5u.com熱心網友回復:
美元符號在算術背景關系中是可選的。這是將值解釋為數字的任何背景關系。
$(( ... ))在所有 POSIX shell 中創建算術背景關系(( ... ))在 bash 中創建算術背景關系,包括在for ((expr1; expr2; expr3)).let在支持古老的、POSIX 之前的非標準語法的 shell(如 bash)中創建算術背景關系。- 在
${array[idx]}or 中array[idx]=value,idx只要陣列沒有被宣告為關聯陣列,就被計算為算術。 - 在
[[ value1 -le value2 ]], 因為-le是算術運算子(它只進行數字比較,不進行字串比較),所以value1和value2都被決議為算術。這也是真實的-eq,-ne,-lt,-gt和-ge。 - 在 中
${string:start:len},start和len都是算術背景關系。 - 當
declare -i variable已宣告一個變數具有數字型別并variable=value隨后運行時,value是算術背景關系。
請注意,這不適用于內部test或[命令中的算術比較;test(無論是否在名稱下呼叫[)就像一個常規的 shell 命令而不是特殊的語法(盡管有一個內置的實作作為性能優化)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/350247.html
標籤:猛击
