Linux和MacOS中的Shell“ set”命令

问题描述 投票:0回答:2

我偶然发现了两个操作系统的set实现之间的微小差异。

运行时:

#!/bin/sh

set -eu

echo "${@}"

在MacOS上运行此命令会出现以下错误:

@:未绑定变量

尽管在Linux环境中运行它,不会导致任何错误,但是会产生一个空字符串。

可以通过某种方式解决,除非将${@}更改为${@:-},因为如果在代码中检查了参数数量,则可能会导致不同的结果。

linux macos sh
2个回答
1
投票

Linux上的外壳符合最新的POSIX标准,而MacOS上的外壳不符合最新标准(请参阅spec.,向下滚动-u;相关:#0000155),因此行为有所不同。解决方法是:

#!/bin/sh
set -eu
echo "${1+"$@"}"

0
投票

由于您在macOS上安装了旧版本的bash,因此必须使用“ $ @”

您可以使用:]查看版本

/bin/sh --version
© www.soinside.com 2019 - 2024. All rights reserved.