主要类 POSIX 外壳的合规性 - bash, dash, ksh,zsh
在ksh(使用 version 验证93u+)中,您的命令会中断,因为ksh 需要嵌入的"字符。内部`...`被转义为\"- 这是与标准的偏差。
语法$(...)没有这个要求。
bash, dash, 并按照规范的要求zsh处理`...`基于 - 的命令(在 的情况下bash,无论它是否在 POSIX 兼容模式下运行)。
- 请注意,这些 shell还支持根据需要
\"在内部以双引号形式`...`转义ksh。
- 可以说,支持这一点是对标准的偏离,因为在 ; 的上下文中,
"它不在形成转义序列的字符中。例如,应该导致,而不是。\`...`echo "`echo \"a b\"`""a b"a b
选读:跨壳测试
如果您发现自己需要经常比较类似 POSIX 的 shell 的行为,请考虑使用shall、my CLI 和 REPL 来调用带有多个类似 POSIX 的 shell 的 shell 脚本或命令。
默认情况下,它的目标bash是 、dash、ksh和zsh(无论安装哪个)。
例如,如果您将命令放在 script./tst中,您将调用shall如下:
shall ./tst
这会产生类似的东西:

请注意如何调用ksh失败,因为ksh需要"在`...`命令替换中将其转义为\".
同样,使用$(...)会绕过这个问题。
shall从npm 注册表安装(Linux 和 macOS)
注意:即使你不使用 Node.js,npm它的包管理器也可以跨平台工作并且易于安装;尝试
curl -L https://git.io/n-install | bash
安装Node.js后,按如下方式安装:
[sudo] npm install shall -g
注意:
- 是否需要
sudo取决于您如何安装 Node.js 以及您以后是否更改了权限;如果出现EACCES错误,请使用 重试sudo。
-g确保全局安装,并且需要放入shall系统的$PATH.
手动安装(任何带有 的 Unix 平台bash)
- 将此
bash脚本下载为shall.
- 使其可执行
chmod +x shall。
- 将其移动或符号链接到您的文件夹中
$PATH,例如/usr/local/bin(macOS) 或/usr/bin(Linux)。