小弟刚学 Linux,对命令的短选项和长选项有了些疑惑,是关于选项的参数设定问题
比如:
我想看一个文件 test 的用户 ID,
短选项,用 stat 命令和-c 来看的话
A1 stat -c %u test 可以执行,输出 1000
A2 stat -c%u test 可以执行,输出 1000
A3 stat -c=%u test 可以执行,输出=1000
长选项,用 stat 命令和--format 来看的话
B1 stat --format %u test 可以执行,输出 1000
B2 stat --format%u test 不可执行
B3 stat --format=%u test 可以执行,输出 1000
发现 A1 和 B1 都是一样的,A2 和 B2 一个可执行一个不可执行,A3 和 B3 输出的内容就不一样了
那么为什么会这样呢?
是短选项和长选项的区别决定的吗?
有哪种写法更规范之说吗?
之后我又试了下 ls 的--color,发现了和 stat 的--format 不一样的结果
C1 ls --color never 不可执行
C2 ls --colornever 不可执行
C3 ls --color=never 可以执行
为何 B1 可以执行,C1 却不可执行了呢?
1
msg7086 2019-03-23 22:39:19 +08:00
没有规范一说。程序怎么解析的就怎么写。tar 后面还可以不加横线直接写选项呢。
|
2
doraemon0711 OP @msg7086
谢谢回复,但是最后那个问题,为何 B1 能执行,C1 就不能执行呢? |
3
nanaw 2019-03-23 22:47:42 +08:00 via Android
@doraemon0711 楼上正解。你看到的那些规范都是约定俗成的,并不是所有程序都严格遵守。不同的程序怎么用还是看手册
|
4
msg7086 2019-03-23 23:26:54 +08:00
@doraemon0711 因为 ls 程序没有解析 C1 格式。
|
5
0ZXYDDu796nVCFxq 2019-03-24 00:28:14 +08:00 via Android 1
以下说的都是约定俗成的
短选项只有一个字母,所以 -c%u 是能正确解析的 长选项的长度不确定,所以要用空格或者等号隔开 所以 ,你的例子里,A3 的 -c=%u 被识别到参数是 =%u 了 B2 无法识别到参数,因为没有分隔符 |
6
0ZXYDDu796nVCFxq 2019-03-24 00:32:25 +08:00 via Android 1
补充:
C1 是因为源代码里不支持长选项用空格分割,只支持等号分割 C2 更离谱了,要识别这种,代码逻辑复杂度得到什么程度,谁愿意维护这种代码…… |
7
doraemon0711 OP 明白了,谢谢各位的回复
确实如果短选项只能有一个字母一切就说的通了, 不过长选项如果有的支持有的不支持,那么是不是都加等号比较好 |
8
0ZXYDDu796nVCFxq 2019-03-24 02:06:05 +08:00 via Android
|