我是 Bash 编程新手。我读过两本不错的长篇指南,但它们让我对运算符和关键字的理解变得一团糟。
哪些更常见且使用更广泛?我不知道何时使用哪个以及为什么。
test
,[[ ]]
或者[ ]
甚至(( ))
$((exp))
或者$[exp]
-gt
或>
,ge
或>=
等等。- 何时使用
<
and>
或( )
以及何时必须用\:
\<
\(
etc来转义它。 ==
或=
(字符串比较)
[
我知道和之间的基本区别,[[
但其他问题对我来说却是个谜。
先感谢您
答案1
test
是一个内置的 shell,它(显然)测试某些给定的条件。一些较旧的 shell 需要特殊命令。因此,您还可以在 找到一个程序/usr/bin/test
。[
也是一个用于测试某些条件的程序。此软件还需要一个右括号,您可以在 找到它/usr/bin/[
。[[…]]
是test
和的替代品[
。它是为 Korn shell (ksh
) 开发的。但您也可以在 Bash 2 以上版本和 Z Shell 中找到它。双括号有一些巧妙的功能:- shell 不进行单词拆分或文件名扩展。
- 您无需引用。
- 您可以使用或,而不是
-a
(AND) 或(OR) 。-o
&&
||
- 他们
=
可以做更多。
((…))
相当于let
。因此基本上((expression))
与 相同let "expression"
。但是let
您可以使用多个表达式,但双括号只允许一个表达式。$((…))
(并且$[…]
)进行了一些计算。您的 shell 会尝试计算括号内的表达式,并用结果替换该表达式。因此echo $((1+1))
导致echo 2
。因此您的 shell 会打印数字 2。
每次想要比较两个数字时,都应该使用带有破折号和两个字母的选项(-ge
,-lt
等等)。如果要比较字符串,则应使用=
或!=
。
你关于转义的问题很难回答。因为除了 shell 之外,它还取决于你使用的软件。因此 iegrep
和grep -E
需要不同的转义。 和 也是这种情况。所以最好的选择是查看手册页。一段时间后,你就会习惯并知道何时使用转义sed
。awk