Cha*_*ens 4 unix command-line cat
我成为 UNIX 用户的时间比我想的要多,在那段时间里,我接受的训练是期望当给一个程序提供矛盾的开关时,最后一个会获胜。最近我注意到
cat -bn file
Run Code Online (Sandbox Code Playgroud)
和
cat -nb file
Run Code Online (Sandbox Code Playgroud)
两者都-b在-n选项(编号所有行)上使用选项(编号非空行)。我在 BSD 和 Linux 上都有这种行为,所以我认为这不是实现上的怪癖。这是在某处指定的东西吗,我是否因为期望第一个示例对所有行进行编号而感到疯狂?
我查看了 cat(1)的FreeBSD 源代码,相关的源代码行是:
case 'b':
bflag = nflag = 1; /* -b implies -n */
Run Code Online (Sandbox Code Playgroud)
所以这看起来像是一个深思熟虑的设计决定;的解释-b是它修改了 的行为-n,而不是-b和-n是两个相互排斥的选择。