我有一个 bash 脚本,我在其中定义了以下函数,
function start-if-exists()
{
if [ "`docker container ls -a|grep $1`" ]; then
echo "Container $1 exists. Starting $1..."
return `docker start $1`
else
echo "Container $1 doesn't exists."
return ""
fi
}
Run Code Online (Sandbox Code Playgroud)
zsh直接在终端()中执行上述函数时,我没有收到任何错误。但是当我使用shcommand( sh my_script.sh)执行它时,我收到以下错误。
my_script.sh:第 10 行:`start-if-exists':不是有效标识符
my_script.sh文件名在哪里。
我错过了什么我的脚本可以使用zsh但失败了sh?
/bin/sh是bash,但是,当作为/bin/sh启动时,它以 POSIX 模式启动。根据bash手册页,在 POSIX 模式下:
- 函数名称必须是有效的 shell 名称。也就是说,它们不能包含字母、数字和下划线以外的字符,并且不能以数字开头。使用无效名称声明函数会导致非交互式 shell 中的致命语法错误。
关于如何弄清楚这样的事情的说明:
/bin/sh --version以查看有关它的信息。它打印了“GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin17)”。bash使用命令参考了手册页man bash。由于这很长,您可能更喜欢将副本保存到文件中并在您喜欢的文本编辑器中查看它。原始man输出包括古老的下划线和退格。您可以通过执行获得没有这些的副本man bash | col -b > file.txt。