Bash 比较和表达式运算符

Bash 比较和表达式运算符

我是 Bash 编程新手。我读过两本不错的长篇指南,但它们让我对运算符和关键字的理解变得一团糟。

哪些更常见且使用更广泛?我不知道何时使用哪个以及为什么。

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

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

先感谢您

答案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 之外,它还取决于你使用的软件。因此 iegrepgrep -E需要不同的转义。 和 也是这种情况。所以最好的选择是查看手册页。一段时间后,你就会习惯并知道何时使用转义sedawk

相关内容