单引号在 POSIX shell 中不应该是“硬”引号吗?
与 Bash 不同,为什么 dash 似乎在内部处理转义符?
$ bash --posix -c "echo ['[\\n]']"
[[\n]]
$ dash -c "echo ['[\\n]']"
[[
]]
Run Code Online (Sandbox Code Playgroud)
单引号的行为确实相同,只是echo实现不同。
当您运行sh -c "echo ['[\\n]']"(对于任何sh)时,发生的第一件事是交互式 shell 处理双引号字符串,将 转换\\为单个\。传递到 shell 执行的字符串是 then echo ['[\n]']。
在该内壳中启动的命令echo(可能是内置的)会看到单个参数[[\n]],以及echo进程 C 风格反斜杠转义符的一些实现,例如\n换行符,而其他一些则不会。
尝试sh -c "printf '%s\\n' ['[\\n]']"一下,看看为什么 printf 比 echo 更好?
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |