linux shell是一种极为丑陋的语言

linux shell是一种极为丑陋的语言。
shell是一以命令行为主的语言,这门语言的丑陋体现在它的语法不规范上。举例说明。

一、空格的使用
linux shell里面最令人困惑的莫过于空格使用方式了。
举几个常见到的例子。
1.if表达式
if[ exp ]
方括号不能紧贴着if,非得用空格隔开写成 
if [ exp ]


2.变量的赋值
var = value
等号两侧不能有空格,非得写成 
var=value 或者 var="value"


3.变量值的追加
a="1 2 3"
b="4 5 6"
我们要将a和b拼接得到“1 2 3 4 5 6”
需要小心翼翼的写成
c=${a}" "${b}


4.函数的定义
要将函数名和函数体写在同一行的时候,花括号必须要小心翼翼的跟名字用空格隔开.


5.所有包含正则表达式中的命令中的正则表达式如果表达式不包含空格,那么双引号不是必须的。而如果表达式中包含空格,又必须使用双引号或者单引号括起来。举个例子。
例1
grep kobe lakers file 在file和lakers文件中查找匹配kobe的行。
例2
grep "kobe lakers" file 在file文件中查找匹配"kobe lakers"的行。
例3
grep "kobe" file 在file文件中查找匹配kobe的行
例4
grep kobe file 在file文件中查找匹配kobe的行,效果跟例3一样,加根不加引号的结果是一样的。
这真是一种令人困惑的表达方式。
例4可以说是例3的一种特例。使用不加引号的正则表达式的好处仅仅是让我们少打了两个双引号。但是这种特例的存在像一颗定时炸弹,我们不知道我们什么时候省略引号会出现问题。但是如果我们一直使用“”来把我们的正则表达式括起来变可以省去这种担心。
6.算术运算
num=1 + 2
运算符两侧的运算数不能用空格隔开,如果要隔开,则要用“”括起来。如下:
num=1+2或者是num="1 + 2"


二、语句的分隔
多个语句写在同一行要使用分号";"来隔开,但是如果一个语句单独写在一行时又不需要分号了。
说完这条规则时你就知道书写命令行时的存在特例与规范情况了。特例就是定时炸弹。
如果我们像C语言一样,每条语句都强制用分号来界定,那么便不会存在这种特例。


三、正则表达式的不统一
awk, grep, sed等很多命令正则表达式的元字符,大多是有差异的。


shell里面到处充满了这种语法不规范的情况。我相信没有人能在不看手册的就能完整无误的写出一个超过一百行的shell脚本。
跟C语言相比,shell简直是一坨屎。

你可能感兴趣的:(Lang@bash,shell)