Bash 包含转义空格的grep路径
我尽了最大努力确保这不是重复的,并在这里找到了许多类似的主题,但似乎没有一个真正解决我的问题: 在bash脚本中,我尝试使用Bash 包含转义空格的grep路径,bash,grep,escaping,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 为什么呢? 当我在终端中尝试相同的方法时,只要我使用不带引号的路径,它就可以正常工作。但一旦我使用引号
path="$HOME/dir\ with\ spaces"
grep pattern "$path/file"
这将返回:
grep: /home/user/dir\ with\ spaces/file: No such file or directory
为什么呢?
当我在终端中尝试相同的方法时,只要我使用不带引号的路径,它就可以正常工作。但一旦我使用引号,我就会得到同样的错误。当然,在脚本中我需要引号,否则转义不起作用。
我做错了什么?如果这样写,字符串中将包含
\
:
然后,当您使用$path
作为文件名时,shell将查找名称中包含\
的文件,而不仅仅是空格
这样写:
path="$HOME/dir with spaces"
或者:
path=$HOME/dir\ with\ spaces
换句话说,可以通过两种方式转义路径名中的空格:
- 使用
逐个跳出空格\
- 将整个字符串括在双引号或单引号内
\
将包含在字符串中:
然后,当您使用$path
作为文件名时,shell将查找名称中包含\
的文件,而不仅仅是空格
这样写:
path="$HOME/dir with spaces"
或者:
path=$HOME/dir\ with\ spaces
换句话说,可以通过两种方式转义路径名中的空格:
- 使用
逐个跳出空格\
- 将整个字符串括在双引号或单引号内