我尽力确保这不重复,并在此处找到许多类似的主题,但似乎没有一个真正解决我的问题:
在bash脚本中我试图使用像
这样的东西path="$HOME/dir\ with\ spaces"
grep pattern "$path/file"
返回:
grep: /home/user/dir\ with\ spaces/file: No such file or directory
为什么? 当我在终端中尝试相同时,只要我使用没有引号的路径就可以正常工作。但是一旦我使用引号,我就会得到同样的错误。当然在脚本中我需要引号,否则转义不起作用。 我做错了什么?
答案 0 :(得分:3)
如果您这样写,\
将包含在字符串中:
path="$HOME/dir\ with\ spaces"
然后当您使用$path
作为文件名时,shell将在名称中查找名称为\
的文件,而不仅仅是空格。
像这样写:
path="$HOME/dir with spaces"
可替换地:
path=$HOME/dir\ with\ spaces
换句话说,您可以通过两种方式转义路径名中的空格:
\
逐个转义空格