【发布时间】:2023-03-16 16:08:01
【问题描述】:
来自$ help test:
测试:测试 [expr]
计算条件表达式。
退出状态为 0(真)或 1(假),具体取决于 EXPR 的评估。表达式可以是一元或二元的。一元 表达式通常用于检查文件的状态。那里 也是字符串运算符和数值比较运算符。
我对@987654323@ 应该包含的内容有点困惑。 test 的帮助页面表明它是一个条件表达式,由文件、字符串或数字运算符组成。那么字符串比较运算符是如何导致不需要的文件重定向的呢?
$ [ "a" > "b" ]
$ ls -la
-rw-rw-r-- 1 user user 0 May 28 17:22 b
我知道为了防止重定向,我需要转义 >,但我很困惑为什么。这不像我可以将任何命令作为expr:
$ [ echo "hello" ]
bash: [: echo: unary operator expected
据我所知,帮助文本 test 仅评估 expr - file re-direction not being one of them 中的预定义运算符。 test/[ 仅用于评估条件表达式 - 我仅限于 test 接受的运算符,以及它接受的参数。
(作为比较,使用以下内置代码不会混淆> 的含义,并且不需要转义):
$ echo $[2>1]
1
那么将> 解释为需要转义的重定向意味着什么?
【问题讨论】:
-
我的 bash 手册页说:
The old format $[expression] is deprecated and will be removed in upcoming versions of bash.请改用$((...)) -
那是哪个手册页?它甚至不在 macOS 的 3.2 手册页中,日期为 2008 年。