bash [ "abc" < $bar ] 是什么意思?

  • 本文关键字:是什么 bar abc bash bash
  • 更新时间 :
  • 英文 :


目前正在学习bash。我想知道[ "abc" < $bar ]命令是什么意思。我知道[]比较或测试它们的值。但是<算子在abc字符串和$bar变量之间是如何工作的,你能描述一下吗?

[ "abc" < $bar ]看起来像是程序员的错误。我们可以将其重写为[ "abc" ] < $bar,具有完全相同的含义。

<是一个重定向操作符,用于从名为$bar的文件中读取输入。[命令忽略标准输入,因此忽略任何输入。如果$bar变量为空,它将写入bash: $bar: ambiguous redirect消息。

[ "abc" ]检查abc是否为非空字符串。它不是一个空字符串,所以[ "abc" ]返回零退出状态,意味着成功。

如果代码的作者打算按字典顺序比较字符串,他应该写[[ "abc" < "$bar" ]][命令不支持<操作符(参见POSIX标准,实际上POSIX提到它不包括)。在Bash中,[ "abc" '<' "$bar" ]可以工作,因为[test的内置别名(参见help [的输出),并且内置的test命令确实实现了字符串比较操作符<>。但是/usr/bin/[ a '<' b ]命令的结果是/usr/bin/[: ‘<’: binary operator expected[外部命令不支持<

另外,$bar没有被引用,所以$bar的结果经历了分词和文件名扩展,这看起来像另一个错误。记得用shellcheck检查你的脚本。

[ "abc" < $bar ]
^-- SC2073 (error): Escape < to prevent it redirecting (or switch to [[ .. ]]).
^--^ SC2086 (info): Double quote to prevent globbing and word splitting.

最新更新