linux 命令行中的 - 和 --
我们经常见到类似下面的:
ls -a #short option
ls --all #long option
有些程序使用short options, 有些使用long options, 有些既有short, 又有long.
据说一开始都是使用short options, 后来有些程序的选项特别多,以至于short options 都不够了, 或者有些options的首字母是一样的, 就产生了long options.
一般来说short options用来日常的敲命令, long options 一般使用在脚本里面, 可读性更好.
但是, 有时候, 你可能也会看到下面的这2种:
tar -cvf - .
ls -- $FILE_NAME #before: export FILE_NAME='--version'
第一个tar 命令看似不好理解, 让我们先看一个正常的:
tar -cvf a.tar file1 file2 #archive file1, file2 成a.tar
对比上面的命令, "-" 相当于 a.tar, 后面的 "." 相当于要archive的文件.
在一些命令行命令中, "-" 用来指代 stdin, 或者stdout.
所以上面的命令意思是: 把当前路径下的文件archive的包输出到stdout. (当然你可以用管道接着处理).
但是注意, 这个不是bash规定的, 而是应用程序自己设置的.
第二个ls命令中间有2个横线 -- (两边都有空格).
英文称: double dash, bare double dash, double hyphen.
这个ls命令的意思是: 列出文件 "--version"的信息, 这里有个文件名字偏偏叫做: "--version".
或者你使用git的时候, 会遇到 git diff origin master -- path/to/file
为什么这里会有2个横线呢? 其实这2个横线是告诉命令行, 后面的字符不是命令行选项, 可以作为一般的字符理解
如果不用 "--":
- ls 那个命令将变为 ls --vesion, 只能打印ls的版本信息, 不能显示文件 "--version"的信息.
- git diff 命令可能会遇到 git diff origin master master (后一个master是一个文件名).