这几天在学习Linux下的shell。我有一个问题。
请看下面的命令:
$ find . -name '*.c' -or -name '*.cpp'
上面的命令在内部像下面的命令一样处理?
$ find . -name '*.c' -and -print -or -name '*.cpp' -and -print
答案1
man find
说:
If the whole expression contains no actions other than -prune or -print,
-print is performed on all files for which the whole expression is true.
所以是的,它是等价的,但可能更容易将其视为:
find . \( -name '*.c' -or -name '*.cpp' \) -and -print
或更简单,并且符合 POSIX:
find . \( -name '*.c' -o -name '*.cpp' \) -print
答案2
基本上这两个命令的含义相同并显示相同的输出。当你有更短的路时,为什么要花更长的时间呢?
答案3
OR 和 AND 运算符遵循布尔逻辑。
对于原语 A = -name '*.c'
、 B = -name '*.cpp'
、 C =-print
我们有以下方程
你的第一个例子:(A+B).C
你的第二个例子:(AC)+(BC)
它们具有简单的数学等价性,即它们是相同的。但第一个更短、更简洁。