我发现在 bash 中
echo `echo \\`
Run Code Online (Sandbox Code Playgroud)
输出 \
\
但
echo `echo \\ `
Run Code Online (Sandbox Code Playgroud)
什么都不输出
当使用旧式反引号替换形式时,反斜杠保留其字面含义,除非后跟“$”、“`”或“\”。
也就是说,反斜杠在将命令交给 shell 进行处理之前(包括在反斜杠转义和引号的普通处理之前)转义美元符号、反引号和其他反斜杠。这意味着:
`echo \\ `
Run Code Online (Sandbox Code Playgroud)
相当于
$(echo \ )
Run Code Online (Sandbox Code Playgroud)
并输出一个空格。该单个空格作为参数插入到您的外部echo
,然后通常在字段拆分期间丢失,因此只是echo
没有参数的裸运行。
另一方面
`echo \\`
Run Code Online (Sandbox Code Playgroud)
\
在命令末尾留下一个悬空,这通常是不合法的(它会指示其他地方的行继续),并且它被视为文字。双方bash
并dash
做到这一点,一样tcsh
,但zsh
其实不然。它似乎没有在 POSIX或其他地方明确指定,所以我认为这是实现定义的行为。
使用$( ... )
命令替换可以让您在其中编写任何脚本而不会受到干扰。它几乎总是比反引号替换更好。
归档时间: |
|
查看次数: |
1015 次 |
最近记录: |