微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

描述CLI参数的语言是什么?

如何解决描述CLI参数的语言是什么?

我今天使用的是随机gcloud命令,它碰巧有很多参数。我故意不使用任何参数启动它,因此我可以使用错误消息来找出它需要哪些参数:

ram@turing:/$ gcloud compute backend-services add-backend del-me
ERROR: (gcloud.compute.backend-services.add-backend) Exactly one of ([--instance-group : --instance-group-region | --instance-group-zone] | [--network-endpoint-group : --global-network-endpoint-group | --network-endpoint-group-region | --network-endpoint-group-zone]) must be specified.
Usage: gcloud compute backend-services add-backend BACKEND_SERVICE_NAME ([--instance-group=INSTANCE_GROUP : --instance-group-region=INSTANCE_GROUP_REGION | --instance-group-zone=INSTANCE_GROUP_ZONE] | [--network-endpoint-group=NETWORK_ENDPOINT_GROUP : --global-network-endpoint-group | --network-endpoint-group-region=NETWORK_ENDPOINT_GROUP_REGION | --network-endpoint-group-zone=NETWORK_ENDPOINT_GROUP_ZONE]) [optional flags]
  optional flags may be  --balancing-mode | --capacity-scaler | --description |
                         --failover | --global |
                         --global-network-endpoint-group | --help |
                         --instance-group | --instance-group-region |
                         --instance-group-zone | --max-connections |
                         --max-connections-per-endpoint |
                         --max-connections-per-instance | --max-rate |
                         --max-rate-per-endpoint | --max-rate-per-instance |
                         --max-utilization | --network-endpoint-group |
                         --network-endpoint-group-region |
                         --network-endpoint-group-zone | --region

For detailed information on this command and its flags,run:
  gcloud compute backend-services add-backend --help

此处的相关错误消息是“必须指定[已编辑长表达式]之一。”这是简化的长表达式:

([IGa : IGb | IGc] | [EGa : EGb | EGc | EGd])

该表达式是使用以下字符的某种语言:[]:|。我以前在其他CLI中已经见过这种语言。 该语言的名称是什么,我在哪里可以学到如何阅读?

解决方法

它叫做语法,它并不是一种语言。

简而言之,grammar描述了如何从单个元素构建表达式的所有有效组合。语法可以用Backus-Naur formrailroad diagram来描述。 解析器处理符合某种语法的文本输入,并在内存中构建与各个语法规则相对应的数据结构。当语法用于定义编程语言的语法时,它描述了源代码文件的结构。之后,编译器完成生成输出文件,执行优化等工作。

在控制台应用程序中,可以使用语法来描述命令行参数的所有有效组合。在这种情况下,gcloud需要解析其参数,但不会编译任何内容。大多数控制台应用程序都很简单,开发它们的人并不在乎语法,因为它们只需要支持少量的可能组合即可。这样,解析器可能只是一些if语句而变得微不足道。这样的语法仅使用一次,它们专用于该特定程序,并且很可能没有名称。

出于某种原因(可能是历史原因),编写控制台应用程序的人通常使用[]表示可选内容,()进行分组,|表示“或”,依此类推。我不确定:代表的Google开发人员的含义,但我猜想它代表“恰好是其中之一”。没有标准,所以每个人的做法都有些不同。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。