Mac OSx终端:功能定义"not a valid identifier"



我有一个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
}

在终端(zsh(中直接执行上述功能时,我没有收到任何错误。但是当我使用sh命令(sh my_script.sh(执行它时,我会得到以下错误。

my_script.sh:第10行:"如果存在则启动":不是有效的标识符

其中my_script.sh是文件名。

我的脚本在zsh中工作,但在sh中失败,我缺少什么?

/bin/shbash,但当作为/bin/sh启动时,它以POSIX模式启动。根据bash手册页,在POSIX模式下:

  1. 函数名称必须是有效的shell名称。也就是说,他们可能不会包含字母、数字和下划线以外的字符,以及不能以数字开头。使用无效的声明函数name在非交互式shell中会导致致命的语法错误

关于如何解决此类问题的说明:

  • 在终端命令行,我执行了/bin/sh --version来查看有关它的信息。它打印了"GNU bash,版本3.2.57(1(-发行版(x86_64-apple-darwin17(">
  • 然后,我使用命令man bash参考了bash手册页。由于时间很长,您可能更喜欢将副本保存到文件中,然后在首选的文本编辑器中查看。原始man输出包括过时的下划线和退格。您可以通过执行man bash | col -b > file.txt来获得没有这些的副本
  • 在手册页中,我搜索了"sh"(作为一个完整的单词,而不是对这些字母的原始搜索,因为它们是许多不相关单词的一部分(。这很快揭示了bash在以"sh"开头时表现不同的讨论;它以POSIX模式开始
  • 进一步搜索"POSIX"会发现在POSIX模式下有一系列不同的东西

相关内容

  • 没有找到相关文章

最新更新