hum*_*235 3 bash shell quoting
我一直认为,通过参数扩展,例如$foo
,shell $foo
在执行命令之前会替换参数的内容.例如,如果我设置了
foo='`'
Run Code Online (Sandbox Code Playgroud)
为什么呢
ls $foo
Run Code Online (Sandbox Code Playgroud)
有不同的行为
ls `
Run Code Online (Sandbox Code Playgroud)
?
bash
在处理命令行时有几个不同的阶段.这里相关的是解析阶段和扩展阶段.阶段按顺序发生,并且在前一阶段完成之前不会开始一个阶段.
在第一个例子中,解析器永远不会看到反引号; $foo
解析完成后,由扩展提供.因此,将文字反ls
引用作为参数传递.
在第二个示例中,解析器看到一个不带引号的反引号,表示命令替换的开始.
归档时间: |
|
查看次数: |
50 次 |
最近记录: |