我创建了一个名为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
并显示它。
我知道不逃避空格字符是不正确的做法,但是有人可以解释一下这是怎么回事吗?为什么第二个命令不起作用?
我知道不逃避空格字符是不正确的做法,但是有人可以解释一下这是怎么回事吗?为什么第二个命令不起作用?
因为您正在寻找一种叫做的东西"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
is的行为是寻找X
and Y
:
$ find a b
find: ‘a’: No such file or directory
find: ‘b’: No such file or directory
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句