Answers:
test
是内置的shell,(显然)测试某些给定条件。一些较旧的Shell需要特殊命令。因此,您也可以在找到程序/usr/bin/test
。[
也是测试某些条件的程序。该软件还需要一个右括号,您可以在找到它/usr/bin/[
。[[…]]
是可替换的test
和[
。它是针对Korn shell(ksh
)开发的。但是您也可以在大于2的Bash版本和Z Shell中找到它。双括号具有一些漂亮的功能:
-a
(AND)或-o
(OR)。&&
||
=
可以做更多的事情。((…))
等同于let
。因此基本上((expression))
与相同let "expression"
。但是,let
可以使用多个表达式,但双括号仅允许一个表达式。$((…))
(以及$[…]
)进行一些计算。您的shell尝试计算括号内的表达式,并用结果替换该表达式。因此echo $((1+1))
导致echo 2
。因此,您的贝壳会打印数字2。每次要比较两个数字时,都应使用带有破折号和两个字母(-ge
,-lt
等等)的选项。如果要比较字符串,则应使用=
或!=
。
您关于转义的问题很难回答。因为它取决于您除了从外壳程序使用的软件。所以,即grep
和grep -E
需要不同的转义。这也符合的情况下sed
,awk
他人和。因此,最好的选择是查看联机帮助页。一段时间后,您会习惯并知道何时使用转义。
if [ 2 -gt 1 ]; …
是更常见的,因为据我所知,这在POSIX兼容的外壳程序脚本中更常见。