我正在寻找find带双引号和不带引号的命令的差异。
我发现了一些奇怪的东西。我有两个文件:
xWrapper.javaYWrapper.java和一些在模式中*Wrapper.java。
我跑了
find . -name *Wrapper.java
Run Code Online (Sandbox Code Playgroud)
它应该返回匹配模式的第一个文件,因为命令扩展为
find . -name xWrapper.java yWrapper.java ..
Run Code Online (Sandbox Code Playgroud)
但结果,我得到了该表格的所有文件。为什么它返回与该模式匹配的所有文件?
如果您在同一目录中,则应该收到错误消息:
~$ mkdir test
~$ cd test
~/test$ touch {X,Y}Wrapper.java
~/test$ find . -name *Wrapper.java
find: paths must precede expression: YWrapper.java
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
Run Code Online (Sandbox Code Playgroud)
因为星号将被扩展,并且-name只接受一个参数。
如果您来自未扩展星号的位置:
~/test$ cd ..
~$ find test -name *Wrapper.java
test/XWrapper.java
test/YWrapper.java
Run Code Online (Sandbox Code Playgroud)
由于星号现在没有扩展(只要它与当前目录中的任何内容都不匹配),find“按原样”查看它,并将其用作通配符。
您应该将-name参数用单引号括起来,以避免这种依赖于上下文的行为:
~/test$ find . -name '*Wrapper.java'
./XWrapper.java
./YWrapper.java
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3398 次 |
| 最近记录: |