我创建了一个名为foo bar
的文件(使用命令touch foo\ bar
)。
然后,在Bash中我尝试了以下命令:
s='"foo bar"'; find $s
s='"foo bar"'; find "$s"
s="foo bar"; find "$s"
使用第一个,find
查找名为"foo
的文件,然后查找名为bar"
的文件。
使用第二个,find
查找名为"foo bar"
的文件。
两个命令都失败:find
找不到任何文件。
最后,第三个命令具有预期的行为:find
查找foo bar
并显示它。
我知道不要逃避太空人物是不好的做法,但任何人都能解释我这里发生了什么吗?为什么第二个命令不起作用?
答案 0 :(得分:1)
我知道不要逃避太空人物是不好的做法,但可以 有谁解释我这里发生了什么? 为什么不是第二个 指挥工作?
因为您正在寻找名为"foo bar"
的内容。你引用太多了:))
说:
s='"foo bar"'
您表明变量$s
实际上是"foo bar"
。也就是说,变量内容中的引号属于。
当你说:
find "$s"
您正在尝试使用引号查找名称正好为"foo bar"
的文件。然后,如果我们创建一个具有这个名称的文件,它将起作用:
$ touch '"foo bar"'
$ s='"foo bar"'; find "$s"
"foo bar"
当你说:
$ s='"foo bar"'; find $s
find: ‘"foo’: No such file or directory
find: ‘bar"’: No such file or directory
你实际上在说:
$ find \"foo bar\"
find: ‘"foo’: No such file or directory
find: ‘bar"’: No such file or directory
也就是说,您将find
与两个参数一起使用:"foo
或bar"
。这些文件都不存在。但是,再次,如果你创建其中之一,瞧!
$ touch '"foo'
$ find \"foo bar\"
"foo
find: ‘bar"’: No such file or directory
请注意find X Y
的行为是寻找X
和Y
:
$ find a b
find: ‘a’: No such file or directory
find: ‘b’: No such file or directory