有人可以解释为什么这是有效的,特别是我没有在 if 语句内的变量名称之前使用 \xe2\x80\x98$\xe2\x80\x99 字符这一事实?我搜索了Bash 参考手册,但找不到解释。
\n#!/usr/bin/env bash\n\none="$1"\ntwo="$2"\nthree="$3"\nfour="$4"\n\nif [[ one -le two ]] && [[ three -ge four ]]; then\n        echo "TRUE:  $one <= $two && $three >= $four"\nelse\n        echo "FALSE: $one <= $two && $three >= $four"\nfi\n我也用这样的循环对其进行了测试,效果非常好
\nfor x1 in {1..3}; do\nfor x2 in {1..3}; do\nfor x3 in {1..3}; do\nfor x4 in {1..3}; do ./test $x1 $x2 $x3 $x4;\ndone; done; done; done | sort\n美元符号在算术上下文中是可选的。这是将值解释为数字的任何上下文。
$(( ... ))在所有 POSIX shell 中创建算术上下文(( ... ))在 bash 中创建算术上下文,包括在for ((expr1; expr2; expr3)).let在 shell(如 bash)中创建一个算术上下文,支持古老的、POSIX 之前的非标准语法。${array[idx]}or中array[idx]=value,idx只要数组未声明为关联数组,就会被计算为算术。[[ value1 -le value2 ]],because-le是算术运算符(它只进行数字比较,不进行字符串比较),并且 和value1都value2被解析为算术运算符。-eq对于、-ne、-lt和也是如此-gt。-ge${string:start:len}, 和start都是len算术上下文。declare -i variable将变量声明为数字类型并variable=value随后运行时,value就是算术上下文。请注意,对于或命令内部的算术比较而言,情况并非如此;(无论是否以名称调用)的行为类似于常规 shell 命令,而不是特殊语法(尽管有内置实现作为性能优化)。test[test[
在Bash 条件表达式的描述中,算术比较运算符( 、 等)的描述-lt如下-gt:
当与 [[ 命令一起使用时,Arg1和Arg2将被计算为算术表达式(请参阅Shell Arithmetic)。
当您点击该链接时,它会显示:
在表达式中,shell 变量也可以通过名称引用,而不使用参数扩展语法。
算术扩展的描述是$((expression))这样的:
表达式中的所有标记都会经历参数和变量扩展、命令替换和引号删除。...评估是根据下面列出的规则进行的(参见壳算术)。