主要类 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
这会产生类似的东西:
![<code>shall</code> 示例输出](https://i.stack.imgur.com/h7cfn.png)
请注意如何调用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)。