我不禁注意到有很多shell代码使用比较运算符作为test
命令的参数,而不是符号。
例如,要使用test
测试是否在shell中没有收到任何参数:
if test $# -eq 0
then
echo "No arguments received"
fi
为什么我们不能用-eq
用更多传统,直观,熟悉,通用和可读的符号替换==
?所以我们有以下内容:
if test $# == 0
then
echo "No arguments received"
fi
其他比较运算符< < = => >
我假设这背后有一些技术原因(可能是兼容性问题?)支持-eq
格式优于==
,但我不了解它们。
答案 0 :(得分:3)
您可以在BASH中使用支持(( and ))
,==
,>=
,{{等所有运算符的<=
(算术处理器) 1}},<
等:
>
PS:参数数量由if (( $# == 0 ))
then
echo "No arguments received"
fi
答案 1 :(得分:3)
首先,使用$#
,而不是$@
。
差异的技术原因是运算符定义了操作数的解释方式。
对于<
,=
和>
,操作数被视为字符串。这意味着10 < 2
因为1-something出现在字母表中的2-something之前,而1 != 01
因为字符串具有不同的长度。
对于-eq
,-gt
,-lt
,操作数被视为整数。这意味着2 -lt 10
因为数字2小于数字10和1 -eq 01
,因为这些都是数字上相同的写作方式1
。