Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Mac OSx终端:函数定义上的“非有效标识符”

Mac OSx终端:函数定义上的“非有效标识符”
EN

Stack Overflow用户
提问于 2018-11-18 11:59:08
回答 1查看 1.6K关注 0票数 2

我有一个bash脚本,在其中我定义了下面的函数,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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中失败

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-18 12:06:21

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

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

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

  • 在终端命令行,我执行了/bin/sh --version来查看有关它的信息。它打印了“GNU,版本3.2.57(1)-release (x86_64-apple-darwin17 17)”。
  • 然后,我使用命令bash引用了man bash手册页。因为这很长,所以您可能更喜欢将副本保存到文件中,然后在首选的文本编辑器中查看它。原始的man输出包括过时的下划线和后置空间。您可以通过执行man bash | col -b > file.txt获得一个没有这些内容的副本。
  • 在手册页中,我搜索了“sh”(作为一个完整的单词,而不是对这些字母的原始搜索,因为它们是许多无关单词的一部分)。这很快就揭示了这样的讨论,即bash在作为“sh”启动时的行为有所不同;它以POSIX模式启动。
  • 对“POSIX”的进一步搜索显示了POSIX模式中不同的内容列表。
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53364885

复制
相关文章
Mac OSX 上安装yarn
如果从来没改过这个.bash_profile文件(可能会提示你“已锁定”),你可能需要先把这个文件的内容复制到另一个txt(其它类型)文件中,之后:
全栈程序员站长
2022/09/01
1.6K0
Mac OSX 上安装yarn
Install Scrapy on OSX|mac OSX 上安装Scrapy[SYN:gejoin.com]
顺利的话,一句命令搞定: sudo pip install Scrapy OSX还是需要额外一些包或升级的,包括:
gigiwangs
2019/03/01
7930
Mac OSX终端安装主题(oh my zsh)
Mac OSX默认使用bash shell,在输入命令的时候,文件的显示没有带颜色.
青年码农
2020/10/13
4.8K0
Mac OSX终端安装主题(oh my zsh)
Mac OSX安装MongoDB
MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是可以应用于各种规模的企业、各个行业以及各类应用程序的开源数据库。作为一个适用于敏捷开发的数据库,MongoDB的数据模式可以随着应用程序的发展而灵活地更新。与此同时,它也为开发人员 提供了传统数据库的功能:二级索引,完整的查询系统以及严格一致性等等。 MongoDB能够使企业更加具有敏捷性和可扩展性,各种规模的企业都可以通过使用MongoDB来创建新的应用,提高与客户之间的工作效率,加快产品上市时间,以及降低企业成本。
xiangzhihong
2022/11/30
8480
Mac OSX 安装 MongoDB
MongoDB是由C++语言编写,开源而且基于分布式文件存储的介于关系数据库和非关系数据库之间的产品;在高负载的情况下,通过添加更多节点保证服务器性能;旨在为WEB应用提供可扩展的高性能数据存储解决方案;以文档的形式存储数据,数据结构由键值对(key / value); 其文档类似 JSON 对象,字段值可以包含其他文档、数组以及文档数组。
xiangzhihong
2022/12/21
7370
Mac OSX 安装 MongoDB
打开Mac OSX原生的NTFS功能
很多同学都会为如何在Mac下写入NTFS格式的磁盘而感到困惑,因为默认情况下,把一个NTFS格式的磁盘插入到Mac里,是只能读不能写的。用起来肯定很郁闷,很多同学也因此把移动硬盘分成了双分区,一个NTFS,一个HFS。其实在Mac下完全是可以写NTFS磁盘的
twelvecoder
2021/12/24
1.2K0
WordPress主题Mac osX 2.03
在Mac osX2.02基础上,修正了一些BUG,添加了滑动门按钮,主题2.03a和2.03b左侧日志改为通栏,2.03c和2.03d为分栏,首页显示摘要和显示全文共四个版本。建议下载使用新版!经测试,发现独立页面模板下面的动态导航与部分插件有冲突,目前发现与Lightbox和Clean Archives Reloaded两个插件有冲突,如果发现动态导航没有正常显示或提示有错误,可禁用插件试一下。感谢网友aunsen的测试。
星哥玩云
2022/06/11
9150
凯蒂阿姨的自定义 Mac 终端
十年前,我开始了我的第一份工作,它要求我使用 Linux 作为我的笔记本电脑的操作系统。如果我愿意的话,我可以使用各种 Linux 发行版,包括 Gentoo,但由于我过去曾短暂地使用过Ubuntu,所以我选择了 Ubuntu Lucid Lynx 10.04。
用户8639654
2021/09/15
3820
Mac OSX 平台安装 MongoDB
安装完成后,我们可以把 MongoDB 的二进制命令文件目录(安装目录/bin)添加到 PATH 路径中:
OwenZhang
2021/12/08
7870
Mac OSX 平台安装 MongoDB
Mac OSX网络诊断命令
下面是一些Mac OSX下常用的网络诊断命令。它们能帮助我们发现网络问题。文中提到的协议和网络通信原理,可参考协议森林。 有些工具,如arping, arp-scan,需要借助HomeBrew安装。 基本工具 网络诊断的第一步,是了解自己的设备,比如有哪些接口,IP地址都是什么。 ifconfig 显示网络接口(interface)信息。如接口名称,接口类型,接口的IP地址,硬件的MAC地址等。 ARP ARP协议用在局域网(LAN)内部。借用ARP协议,设备可以知道同一局域网内的IP-MAC对应关系。当我
Vamei
2018/01/18
2.2K0
WordPress主题Mac osX 2.02
这是一款仿Mac osx外观的Wordpress杂志型主题。首页可以添加自定义图片并显示日志摘要,主题包含两套主页面模板。通过主流浏览器测试。独立页面模板下面仿Mac osx的动态dock导航,由于IE6不支持透明PNG图片,而采用GIF图片,效果差了些。
星哥玩云
2022/06/11
1.1K0
WordPress主题Mac osX 2.02
ImageMagick and JMagick install on Mac OSX
接的遗留代码,在本地运行,有jmagick-6.4.0.jar 但是出现错误: javax.servlet.ServletException: java.lang.NoClassDefFoundError: Could not initialize class magick.ImageInfo main里新建一个ImageInfo 则出现错误: Exception in thread "main" java.lang.UnsatisfiedLinkError: no JMagick in java.libr
架构师刀哥
2018/03/20
1.8K0
Mac OSX 平台 MongoDB 的安装及管理
可以直接在官网下载社区版:https://www.mongodb.com/try/download/community
叙帝利
2021/01/07
3.5K0
【Mac】Mac上终端执行Control-C/Control-D/Control-Z的区别
利用air实现Go程序的实时热更新,在键入air命令后,无意之间按下了ctrl+Z,发现程序好像从终端退出了,但是air的临时文件tmp没有被删除,通过活动监视器也发现进程仍然存活,这是为什么呢?
DDGarfield
2022/06/23
1.7K0
给Mac OSX的Dock上加入最近打开的应用功能
如果你想把你的Dock加入一个类似于最近打开的应用的功能,方便快速打开最近使用的应用的话,有什么办法吗?
EltonZheng
2021/01/26
8891
给Mac OSX的Dock上加入最近打开的应用功能
Mac OSX 平台 MySql 的安装及维护
安装完成之后在【系统偏好设置】中会有一个 MySql 的图标,点进去可以启动或者结束 MySql 服务。
叙帝利
2021/01/07
1.1K0
Mac OSX使用 daocloud提供的Docker镜像
由于直接使用官方提供的 docker hub 仓库地址下载镜像非常慢, 所以改用国内的镜像是加速镜像下载的方法, 我使用的是 DaoCloud 提供的 docker hub 镜像. 使用 DaoCloud 的镜像得先注册一个 DaoCloud 的账号,DaoCloud官网 注册完成登录到控制台, 有个 加速器 的标签, 点击进去, 然后点击 立即使用 , 类型选择 MacOS 这时候会生成一个镜像地址. 拿到镜像地址以后修 boot2docker 的配置文件. 通过命令 boot2docker config
zcqshine
2018/05/11
1.2K0
盘点OSX上最佳的DevOps工具
对于运维人员来说,他们往往需要各种各样的工具来应对工作需求,近日Dustin Collins通过“The Best DevOps Tools on OSX”一文对OSX平台上的工具进行盘点,由OneAPM工程师翻译。 以下为译文 如果你供职于一个DevOps团队,那么肯定会用到很多工具,比如通讯、架构、编排、编程、测试等等。笔者总是关注一些热门工具,这样就能一直跟随潮流。笔者工作中使用的就是Macbook Pro,因此本文列出了一些经常使用的工具,以及一些使用工具。 协作方面 Slack——沟通(内部或对外
CSDN技术头条
2018/02/11
1.5K0
盘点OSX上最佳的DevOps工具
点击加载更多

相似问题

在终端Mac OSX上使用cd命令

10

在MAC OSX 10.9上使用终端SVN Checkout

20

运行NDK时,mac终端错误不是有效的标识符

10

在Mac OSX上启动终端时运行的进程

10

Textmate教程终端mac-osx

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文