grep的路径,包括转义空格

时间:2017-06-18 09:08:44

标签: bash grep escaping

我尽力确保这不重复,并在此处找到许多类似的主题,但似乎没有一个真正解决我的问题:

在bash脚本中我试图使用像

这样的东西
path="$HOME/dir\ with\ spaces"    
grep pattern "$path/file"

返回:

grep: /home/user/dir\ with\ spaces/file: No such file or directory

为什么? 当我在终端中尝试相同时,只要我使用没有引号的路径就可以正常工作。但是一旦我使用引号,我就会得到同样的错误。当然在脚本中我需要引号,否则转义不起作用。 我做错了什么?

1 个答案:

答案 0 :(得分:3)

如果您这样写,\将包含在字符串中:

path="$HOME/dir\ with\ spaces"

然后当您使用$path作为文件名时,shell将在名称中查找名称为\的文件,而不仅仅是空格。

像这样写:

path="$HOME/dir with spaces"

可替换地:

path=$HOME/dir\ with\ spaces

换句话说,您可以通过两种方式转义路径名中的空格:

  • 使用\逐个转义空格
  • 将整个字符串用双引号或单引号括起来