Bash 比较和表达式运算符

Mik*_*keD 11 command-line bash scripts programming

我是 bash 编程的新手。我读过两本很好的很长的指南,但它们在我的脑海中把运算符和关键字搞得一团糟。

哪些是更常用和广泛使用的?我不知道什么时候使用哪个以及为什么。

  1. test[[ ]]或者[ ]甚至(( ))
  2. $((exp)) 或者 $[exp]
  3. -gt>ge>=等。
  4. 何时使用<>( )何时我们必须使用\: \< \(等来逃避它。
  5. ===(字符串比较)

我知道[和之间的基本区别,[[但其他问题对我来说是个谜。

先感谢您

qbi*_*qbi 5

  • test是一个内置的外壳,(显然)测试某些给定的条件。一些较旧的 shell 需要一个特殊的命令。因此,您还会在 中找到一个程序/usr/bin/test
  • [也是测试某些条件的程序。该软件还需要一个右括号,您可以在 找到它/usr/bin/[
  • [[…]]是可替换的test[。它是为 Korn shell ( ksh) 开发的。但是您也可以在大于 2 的 Bash 版本和 Z Shell 中找到它。双括号有一些漂亮的特点:
    • shell 不进行分词或文件名扩展。
    • 你不需要引用。
    • 您可以使用or代替-a(AND) 或-o(OR) 。&&||
    • =可以做更多的事情。
  • ((…))相当于let。所以基本上((expression))是一样的let "expression"。但是 withlet你可以使用多个表达式,但双括号只允许一个表达式。
  • $((…))(并且还$[…])做了一些计算。您的 shell 会尝试计算大括号内的表达式并用结果替换该表达式。所以echo $((1+1))导致echo 2. 所以你的 shell 会打印数字 2。

每次当你要比较两个数字,你应该使用一个破折号和两个字母(该选项-ge-lt等等)。如果你想比较字符串,你应该使用=or !=

你关于逃避的问题很难回答。因为除了shell之外,还取决于你使用的软件。所以,即grepgrep -E需要不同的转义。对于sed,awk和其他人也是如此。所以最好的选择是查看联机帮助页。一段时间后,您会习惯并知道何时使用转义。