$tar xvf archive.tar.gz
我们看在这个例子中:- x是一个指定提取模式的参数
- v是一个参数,指定的是输出内容的详细(verbose)程度
- f是另一个参数,用于指定采用的是文件模式,即将压缩结果输出到一个文件或从一个压缩文件读取数据
- archive.tar.gz是一个参数,提供文件名 。
$git commit -m "Initial commit"
我们看在这个例子中:- git是主命令(primary command)
- commit是一个子命令,用于从staged的修改中创建一个新的提交(commit)
- “-m”是commit子命令的一个标志,用于指定提交信息
- "Initial commit"是commit子命令的一个参数,为"-m"标志提供值 。
$docker run --name=my-container ubuntu:latest
我们看在这个例子中“--name=my-container”是一个选项,它将容器的名称设为my-container 。该选项前面的部分“--name”是一个标志,后面的部分“my-container”是参数 。3. 使用cobra包等来解析和验证用户输入的信息如果手工来解析和验证用户输入的信息,既繁琐又容易出错 。幸运的是,有许多库和框架可以帮助你在Go中解析和验证用户输入 。其中最流行的是cobra[16] 。
cobra是一个Go包,它提供了简单的接口来创建强大的CLI程序 。它支持子命令、标志、参数、选项、环境变量和配置文件 。它还能很好地与其他库集成,比如:viper[17](用于配置管理)、pflag[18](用于POSIX/GNU风格的标志)和Docopt[19](用于生成文档) 。
另一个不那么流行但却提供了一种声明式的方法来创建优雅的CLI程序的包是Kingpin[20],它支持标志、参数、选项、环境变量和配置文件 。它还具有自动帮助生成、命令完成、错误处理和类型转换等功能 。
cobra和Kingpin在其官方网站上都有大量的文档和例子,你可以根据你的偏好和需要选择任选其一 。
4. 遵循POSIX惯例和GNU扩展的CLI语法POSIX(Portable Operating System Interface)[21]是一套标准,定义了软件应该如何与操作系统进行交互 。其中一个标准定义了CLI程序的语法和语义 。GNU(GNU's Not Unix)是一个旨在创建一个与UNIX兼容的自由软件操作系统的项目 。GNU下的一个子项目是GNU Coreutils[22],它提供了许多常见的CLI程序,如ls、cp、mv等 。
POSIX和GNU都为CLI语法建立了一些约定和扩展,许多CLI程序都采用了这些约定与扩展 。下面列举了这些约定和扩展中的一些主要内容:
- 单字母标志(single-letter flag)以一个中划线(-)开始,可以组合在一起(例如:-a -b -c 或 -abc )
- 长标志(long flag)以两个中划线(--)开头,但不能组合在一起(例如:--all、--backup、--color )
- 选项使用等号(=)来分隔标志名和参数值(例如:--name=my-container )
- 参数跟在标志或选项之后,没有任何分隔符(例如:curl -o output.txt https://example.com ) 。
- 子命令跟在主命令之后,没有任何分隔符(例如:git commit -m "Initial commit" )
- 一个双中划线(--)表示标志或选项的结束和参数的开始(例如:rm -- -f 表示要删除“-f”这个文件,由于双破折线的存在,这里的“-f”不再是标志)
推荐阅读
- 可以让你零代码快速开发REST API的几个开源项目
- HTTP缓存如何提高Web应用程序的性能?
- 搭建私有云平台,无需开发,一键部署,让你省事又省心。懂视生活
- APP开发用什么语言好?Java和PHP的区别在哪?
- GPT-4解放程序员!GitHub推出Copilot X,动动嘴就能写代码
- iOS使用FFmpeg命令行
- 从零开发一套基于React的加载动画库
- 短视频开发,如何正确的使用前后端分离?
- 2023年优秀编程语言趋势
- 程序员|作为一个程序员为什么今年的工作感觉更难找了呢