| 
 
初级会员 
 
	积分55金钱55 注册时间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/,而是要多加两个单引号把它框起来呢?
 教程里,是这么描述的,看得比较懵逼。感觉说不通。
 
 
  
 
 
 
 | 
 |