初级会员
- 积分
- 54
- 金钱
- 54
- 注册时间
- 2018-1-30
- 在线时间
- 10 小时
|
#########################################################################
HOSTARCH := $(shell uname -m | \
sed -e s/i.86/x86/ \
-e s/sun4u/sparc64/ \
-e s/arm.*/arm/ \
-e s/sa110/arm/ \
-e s/ppc64/powerpc/ \
-e s/ppc/powerpc/ \
-e s/macppc/powerpc/\
-e s/sh.*/sh/)
HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
sed -e 's/\(cygwin\).*/cygwin/')
export HOSTARCH HOSTOS
#########################################################################
上面的HOSTARCH的获取过程我能理解,我的虚拟机是Ubuntu18.04的,shell uname -m返回的是x86_64,然后 | 是管道,sed -e 会拿着x86_64来跟后续的那些匹配来替换,因为所有的都不符合,最终得到的就是x86_64
下面HOSTOS我也照着上面的理解过程来理解,前面的shell uname -s返回的是Linux, | 是管道, tr '[:upper:]' '[:lower:]'是把所有的大写转换成小写,但后面那个sed -e 's/\(cygwin\).*/cygwin/'我就懵逼了。
里边的\(和\)是否要理解成和C语言的转义字符一样的处理,其实它想表达的是将(cygwin).*的东西转换成cygwin?
如果是想这么转换的话,为什么不和上面HOSTARCH的获取一样,sed -e s/\(cygwin\).*/cygwin/,而是要多加两个单引号把它框起来呢?
教程里,是这么描述的,看得比较懵逼。感觉说不通。
|
|