我偶然发现了两个操作系统的set实现之间的微小差异。
set
运行时:
#!/bin/sh set -eu echo "${@}"
在MacOS上运行此命令会出现以下错误:
@:未绑定变量
尽管在Linux环境中运行它,不会导致任何错误,但是会产生一个空字符串。
可以通过某种方式解决,除非将${@}更改为${@:-},因为如果在代码中检查了参数数量,则可能会导致不同的结果。
${@}
${@:-}
Linux上的外壳符合最新的POSIX标准,而MacOS上的外壳不符合最新标准(请参阅spec.,向下滚动-u;相关:#0000155),因此行为有所不同。解决方法是:
#!/bin/sh set -eu echo "${1+"$@"}"
由于您在macOS上安装了旧版本的bash,因此必须使用“ $ @”
您可以使用:]查看版本
/bin/sh --version