Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 单引号在bash脚本中是否将反斜杠视为特殊的?_Regex_Bash_Terminal_Double Quotes_Single Quotes - Fatal编程技术网

Regex 单引号在bash脚本中是否将反斜杠视为特殊的?

Regex 单引号在bash脚本中是否将反斜杠视为特殊的?,regex,bash,terminal,double-quotes,single-quotes,Regex,Bash,Terminal,Double Quotes,Single Quotes,从我所读到的内容来看,“在单引号中,除了‘被逐字解释’之外的每一个特殊字符”。所以,我认为反斜杠(\)也可以从字面上理解 但是,当我尝试在别名中使用它时,它仍然会被解释为一个特殊字符: alias somefolder='cd/Some\path/with\spaces/' ……还能用吗 但这并不是: alias somefolder='cd/Some path/带空格/' 这让我感到惊讶,因为我认为单引号的全部意义应该是针对懒惰,也就是说,当您不使用$展开任何变量时(因为这需要双引号) 我真的

从我所读到的内容来看,“在单引号中,除了‘被逐字解释’之外的每一个特殊字符”。所以,我认为反斜杠(\)也可以从字面上理解

但是,当我尝试在别名中使用它时,它仍然会被解释为一个特殊字符:

alias somefolder='cd/Some\path/with\spaces/'

……还能用吗

但这并不是:

alias somefolder='cd/Some path/带空格/'

这让我感到惊讶,因为我认为单引号的全部意义应该是针对懒惰,也就是说,当您不使用
$
展开任何变量时(因为这需要双引号)


我真的怀疑tldp来源是错误的,那么有更好的方法来解释这一点吗?谢谢。

这是因为alias将由shell展开,在此过程中,单引号将被删除。因此,在alias扩展之后,您只需

cd /Some path/with spaces/
如你所说,剩下的将失败

但是,当您使用
\
来转义空格时,在展开别名(并删除单引号)后,shell将有以下操作:

cd /Some\ path/with\ spaces/

这将按预期工作。

这是因为alias将由shell展开,在此过程中,单引号将被删除。因此,在alias扩展之后,您只需

cd /Some path/with spaces/
如你所说,剩下的将失败

但是,当您使用
\
来转义空格时,在展开别名(并删除单引号)后,shell将有以下操作:

cd /Some\ path/with\ spaces/

这将按预期工作。

啊,但是您正在构建的别名将您的单引号var放入
cd
命令,这将阻塞您的应用程序

cd /Some path/with spaces/
因为
cd
不知道如何处理空间,而不是你的bash

\
添加到字符串时,如中所示

'cd /Some\ path/with\ spaces/'

cd
在解释
\
,而不是bash,它只是一个信使

Ahh,但是您正在构建的别名是将您的单引号var放入
cd
命令,这会阻塞您的

cd /Some path/with spaces/
因为
cd
不知道如何处理空间,而不是你的bash

\
添加到字符串时,如中所示

'cd /Some\ path/with\ spaces/'

cd
在解释
\
,而不是bash,它只是一个信使

与引用无关。它与别名扩展有关,别名扩展相当于字符串值的字面意义。在路径周围加上引号。。。。这是为什么应该使用shell函数而不是别名的众多原因之一。不过……我对这一点感到更加困惑:
alias somefolder='cd'/Some path/with spaces/'
不起作用,正如我在问题中所说的那样。但是,在命令行中,
cd'/Some path/with spaces/'
确实有效?…因此,如果别名扩展去掉了单引号,那么为什么在
cd
之后的路径名周围放置另一组单引号不起作用呢?与引号无关。它与别名扩展有关,别名扩展相当于字符串值的字面意义。在路径周围加上引号。。。。这是为什么应该使用shell函数而不是别名的众多原因之一。不过……我对这一点感到更加困惑:
alias somefolder='cd'/Some path/with spaces/'
不起作用,正如我在问题中所说的那样。但是,在命令行中,
cd'/Some path/with spaces/'
确实有效?…因此,如果别名扩展去掉了单引号,那么为什么不在路径名的后面加上另一组单引号呢?更准确地说,在创建别名时,引号已被删除。感谢您的回答。不过,这件事还是有点奇怪,请看我对我的问题的评论。谢谢。更准确地说,在创建别名时,引号已被删除。谢谢您的回答。不过,这件事还是有点奇怪,请看我对我的问题的评论。谢谢