00:00
接下来继续来学习编程,我们给大家介绍一下这个数组啊。数组,这个数组呢,是一个稍微复杂一点的数据结构,它比咱们之前的呃,看到的数据形式要更为复杂,它相当于是一个综合性的数据结构,咱们以前存的内容要么就是一个字符串,要么就是什么数字。都是一个单一值,而数组数组,那就是数据的组合。所以它的形式呢,是多个数据的集合啊,就比单个数据要复杂了。那么,为什么要发明数组这种技术呢?因为我们在工作中有很多数据,它相互之间是有一定的关联的。那比方说我现在就想存放啊,咱们学生的一些信息。
01:15
那我想存放咱们每个学生的信息。如果用传统的变量形式保存,我们应该如何保存?我们是不是有可能是这么保存的,假如说我们这儿有一个这是内存空间,我想存放咱们学生信息,假设有一个学生A这个人,A这个人我要存放他的姓名,好,那我就把姓名写在这。啊,除了姓名可能还有别的属性啊。年龄。是。
02:00
啊,可能我就用一个变量来保存内幕。这个name变量存放他的姓名年龄,那我再拿个变量,我再拿个变量。哎,比方说我们存一个年龄是吧,假装年轻一点啊。永远18是吧,啊永远18啊永远18,那当然肯定还有别的属性。好,我就这么存,但这么存将来会有另外的问题出现啊,比方说还有什么联系方式啊,或者是城市啊,所在这个城市啊等等吧,哎,性别年龄等等,真的。哎,性,这是性别。把心别放在这个位置。
03:04
要真的。M。啊,那么现在我们用这种方式存,你这么存不是不可以,但是你从名称上来讲它有关系吗。你这个名字叫name age gender,你说的是一个人的姓名、年龄。还是不同人的年龄性别,真的?你看不出来呀。因为就是个字符串嘛,这变量。他们这三者之间有没有联系,名称上体现不出来。问题还有一个情况出现,就是万一再有一个人呢?我这儿如果还想存放另外一个人的信息,那另外一个人他也有姓名,也有年龄,也有性别。
04:00
那现在这个内幕已经被占了。对吧,那你怎么办啊,你不能用内了吧,那你怎么办?比方说我们这儿再来一个人。啊,再来谁呀?肖总,肖总吧,是吧,啊肖总。好,那你看呀,不能把它拖过来。那你这个内已经被人占了,你不能再用name了,那我这那叫啥呀,那人家小组也是姓名啊,那NAME1。你是不是就这么写?那你觉得这个名字这样好看吗?啊,是不是很糟糕?太糟糕。所以总之,如果有些数据带有相关性的时候,我们用传统的变量保存,是不是好像就感觉力不从心?
05:00
因为你从这个名字上,你看不出他们之间的关系来,那比方说这三者理论上是不是应该有一定的关系啊,这三者是不是应该属于一个整体啊,是不是这个道理啊,哎,它应该是属于一个整体。这三者是一个整体。啊,另外的其他的数据可能是另外一个整体。但是你从名称上体现不出来。这样的话,你将来写成代码,写成脚本,是不是这个条理上就会产生。易毒性很差。啊,你要别人不懂,拿你的脚本可能看半天琢磨过来啥意思?你要自己写的,说不定你过上半年以后再看也看不懂了,你不知道他啥意思了,你还得分析这个代码的前因后果。是不是易毒性就很差?所以。我们就有必要把一些相关的数据。
06:00
组合在一起。给它起一个统一的名称。这就叫数组。明白了吗?数组,数组就是数据的集合。那么数组是怎么回事呢?哎,这么组织。我可以把一些相关的数据给它起一个数组的名称。啊,叫什么呢?我给他单独起个名。这个假设起个名字就叫一。啊,这是第一个学生啊,或者我就给他起个student。啊,那这个student代表着这些数据的集合。它代表着一些数据的集合。代表着三个数据的集合。这三个数据。是由student的一个数组的名称来表示。
07:01
他把这相类似的相关的数据就整合在一起了。当然,由于这里面它并不是单一的值。所以我们将来是有可能希望能取出这三个组成部分,我们叫三个元素的其中某一个元素的。比方说我想取其中的这个姓名。那你要取姓名,你现在是student来表示,那你怎么表示?我取的是王,怎么表示取年龄,取姓名,你是不是得有一个元素的唯一标识?对吧,那元素的标识最简单容易理解的就是用数字,比方说第一个元素零。我想接下来你应该明白,是不是下面这个是一啊,这是不是就是二。对吧。
08:01
那所以我现在就好取了,咋取啊,我要取姓名不就是student零号元素吗。我要取性,性别这个同一个人的性别,那么就是STUDENT1不就完了。啊。啊性别是吧,说错了说错了啊二当然有人说,那你这个是一个人,那万一还有肖总呢,对不对,嗯,肖总肖肖总,那那你怎么怎么怎么存啊这个。啊,那我可以把这个呢,比方说这个是零号啊,那就这给他选他的学号吧,啊,比方说这个是一号学生啊,这还有二号学生啊,比方说哎,假设肖总的编号是二。二是吧,小二。哎,这个。
09:07
好,整个给他拖过来。哎,这个呢,就是消。小。肖总,有事办了吗?性别应该是男的吧?你看。如何自收啊啊,咱们这儿还有那个对对我我说的是咱们两个好几个姓肖的了,还有肖丹的啊,就是这个啊写在这那大家看在这我们就表示了两个学生信息,这两个学生信息,将来一号学生他的信息可以用012取出他的信息来。那第二个学生是不是也是012可以取出他信息来。大家看用这种方式是不是显而易见数据具具有一定的逻辑性啊,你这一看啊,知道谁谁谁啥关系不就取出来了吗?
10:05
所以比我们之前的那种组织方法要方便啊,要更有分类的这种特性。所以这就是数组啊,那么数组呢,当然咱们将来可能还会学Python课程,Python里面实际上无非就换了个名,他叫什么列表啊元组,哎,实际上都是类似的,都有这种数据结构。啊,数组呢,是很多开发语言里面,你像C语言啊,Java啊谁啊,这些都是相通的啊都是相通的。那所以数组咱们就明白了,当然我们数组呢,它每一个元素都是有下标的,这个下标咱们称为索引,也可以称为索引,就是那个元素的标志。我们称为索引,或者称为下标都行。那么当然这个索引的编号一般咱们都是从零开始编的,0123。
11:05
所以呢,实际上大家现在应该能看出这个规律来,这个所以呢,最大值和元素的个数之间是什么关系。所以呢,最大值现在是二。它和元素的个数之间。是不是要加一的关系,因为它从零开始变嘛,从012变变到二。所以它加一不就是元素的个数三个吗。这就是他的关系。但是呢,我们万一有一天。把其中的一个元素删了。比方说万一我把这个年龄这个字段,这个元素删了,删了以后。那这中间少了一个一号元素,那在这种情况下,那就不是加一的关系了。那么这种中间缺了一些,造成索引不连续,我们叫稀疏索引。
12:08
稀疏格式,那中间它断断了它不连续,听懂了吗?叫稀疏,这个应该好理解。啊,叫稀疏。好。那接下来咱们索引的下标,虽然我们一般用01234编号,但也并不是绝对的,我们将来可以自定义格式。比方说刚才我们在这个地方写01234 01234,有的时候可能好用,有的时候可能就不太好,你看我们用字符串表示多好,比方说我们是不是用name。Name来当下标,那你想这个我们用真的,大家想这个name当下标名显示见是不是比这个0123看起来更清晰啊。
13:00
当然这个name和这个name是同一回事吗?这也有name是吧?哎,这也有,真的,但是它是同一回事吗?当然不是了,因为他们是不同数组的,不,虽然同名,但是它是不同数组的,当然那就不一样了啊,所以呢,我们现在可以看啊这个。是STUDENT1这个数组里的name这个元素,而你下面这个呢,是STUDENT2里面的name这个元素,是不是没关系啊,没关系,所以呢,我们现在都叫内蒙,也没关系啊,不冲突啊,也是各是各的内蒙。那么我们把这种非数字化的索引啊,或者也称为下标。这种我们称为自定义的索引格式,这种自定义的格式啊,咱们也有一个专业的称呼,叫什么呢?叫。
14:10
关联索引叫关联索引。关联索引。那当然整个数组咱们也称为关联数组。不过要求,但是4.0才有这功能啊,当然我们现在奋斗七,奋斗六。能不能满足这个要求?那我们把这个老版本六打开。啊,当然我甚至还有更老的,我这有5.4的。那老。啊,当然七和八这应该是没问题的,都应该是满足要求的啊,比方说我们看看七,看看七的版本怎么看呢啊。
15:02
4.2吧。那4.8不用看了,那肯定是满足要求的。那老版本六。六版本看看满足不满足要求。但是。六也能满足要求啊,所以主流的版本应该都是满足的。啊,当然这个确实如果是老版本,那我现在我这有五个版本,有五版本呢,因为比较老了。这个五版本是什么时候有的?我在08年08年的时候,零八年考这个红帽的认证,当时用的就是红包五。所以也是十十多年前了。
16:01
那你看他这个,但是这个就不支持了。3.2看了吧,三点那这个就别用了,别用。好,这是刚才给大家说的。当然这个关联数组呢,很有意义啊,因为它的格式呢是可以自定义的,将来我们用起来还是非常方便的。那关联数组也好,普通数组也好,用的时候呢,我们可以考虑先声明一下,声明的方法呢,是用declare。杠A。杠A呢?如果是小A,表示普通数组。普通数组,它的下标是零、一、二三、四这个编号,那如果是大A,那就是关联数组。那也就是说他用的那个下标是自定义格式,可以是字母数字啊,怎么都行,甚至一句话都可以啊,把一个字符串写成一句话,它也可以实现。
17:07
那么数组的定义已经知道怎么去声明了,那接着我们怎么去变数组赋值?这数组实际上它里面存的就是多个元素啊,就是多个变量的值,相当于。那么我们现在要把数组赋值进去,那么方法就是这个写法,那这个写法实际上就是数组名加上索引,就是那个下标啊,当然那个中括号里面写几,比方说零,那就写零,一就写一嘛。等号后面跟上一个值,这就可以了。啊,所以实际上大家现在看这个格式,那实际上一个元素,那实际上就类似于一个变量,对吧,就是个变量。所以一个数组就是多个变量的集合嘛啊。无非就是这些变量都是具有相关性的。
18:00
那你像这个就是。WEEKDAY0,那这是零号元素,负了一个SUNDAY4号元素啊,其他也都是一样的。那这是一次只对一个元素赋值,那么我们也可以一次对多个元素赋值,全部都赋值,那就用小括号括起来,每个元素中间空格隔开。这样的话,一次性对所有元素赋值。啊,那么赋完值之后,我们要想调用这个。数组的值怎么调用?那么调用的方法是这样的,用declare杠,一是显示所有的数组。啊,这是它数组的名称以及它的值,我们要显示某一个,我只显示其中一个,那么方法就是数组的名称加下标,别忘了外面有个花括号,前面加个高。
19:11
好,那我们来试一试。那现在假设有这样的一个数组的名称,它是由多个元素组合而成。所以我这就写个下标,一般我们从零开始,当然我们这个数组能用的时候可以先声明一下,当然这个声明不是强制性的。呃。普通数组可以不声明,但关联数组必须先声明。如果你将来要关联数组,一定要先声明,不声明的话,它就当成普通数组了。啊,当然普通数组可以声明也可以不声明,你直接用过来上过来用也行啊,我比方说我们就规范一点嘛,我先声明一个普通数组叫title啊。那title就是我们在公司里面,你在公司里面的一个职称是吧,是一个头衔啊,那么零号头衔,零号头衔排在老大的当然是谁了。
20:15
啊,一般公司里面可是CEO对吧,零号那么一号一号谁啊,什么COOCOO呢,就相当于总经理似的总经理。啊,还有二号二号那就欧多了,什么首席财务官,首席技术啊,这个这个信息过就是技术技术官叫CTO是吧,什么CIO之类的,那你们未来未来发展的第一个上了班以后,第一个小目标,你就是背着CTO去吧,是吧。啊,这是初步的阶段,等你将来再往上就是CEO嘛。
21:03
是吧,迎娶白富美走上人生巅峰了是吧?啊啊,当然那还有第三个,那就是我们运维的啊,运维就是背锅的吧?啊,背锅的,背锅的,背锅侠,开玩笑啊,咱们老说韵维是背锅的,实际上不是背锅的啊。这个。背锅说明你能力不够啊,你能力好了,你可以甩锅嘛,是吧,你能力不够,不够就只能背锅了,是这样啊,所以你还把本事学好了,学会甩锅,这样的话才行,当然我们这个甩锅并不是说这个责任在你这,非要甩给别人。至少说要学会别人的责任不能甩在你身上是吧?哎,好,那这是咱们写了这样的一个。变量数组就有了,有了,那我们想打印,那打印就是发括号title中括号想显示谁就显示谁,比方说我们显示一个二,看到没有,你想显示一个三,这这不就出来了。
22:16
啊,这里面需要注意这个花括号,你要万一不写。你看看他结果是啥?你看这个花括号不写,他认为实际上执行的这个。就是他把零号元素作为了默认值。啊,那当然你后面再跟什么东西,再跟什么东西,他是不是认为它后面都是字符串了啊,比方说你后面再跟一个什么东西,他认为都是字符串了。啊。啊,这就是数组的元素的这个这个数值和查看啊,当然这个东西也可以改啊,也可以改,那这就是直接再改就行了啊,比方说我们三号啊,别背锅了,那我们将来是高级运维工程师啊,将来我们还要既懂运维又懂开发,那我们就改了它了,改了以后呢再看。
23:21
哟,这个地方少了个花花花。啊,这改了也可以改啊,那这些实际上数组它本身就是一个一的变量嘛,里面无非就是。变量内容可以随时调整。那这就是数组一个一个复制,当然我们刚才也说过,也可以整体全部值,比方说那我们这儿再来一个姓名。这个姓名呢,它是一个数组。我想对这个数组元素全部都复制,我们就可以这么写啊,比方说马哥空格张sir对吧,隔壁的王老师。
24:11
还有肖总吧,是吧,啊啊肖总暂时委屈一下啊。等你上了班,干上一两年,你就可以当CTO了,是吧?好,那现在你看我们用这种方式就是批量复制。那我就附了四个元素进去。啊,那有没有呢?那我们可以用declare看到所有的,这个是看到所有的元,那个数组,其中也包括我们刚才定义的title和内容,是不是都能看得到啊,那当然,那你要现在要想看其中一个,那我们也知道怎么看,那无非就是把这改成内画括号。
25:03
对吧,这不就看了吗。当然,这是规矩的写法。这是规矩的写法,比较标准的写法,但事实上这里面的字符串,你只要能生成这个空格。一个一个隔开的列表,它就可以批量对数组复制啊,比方说我们这有一个数字DJDJ呢,我们完全可以来一个划括号,一点点十啊,这从零开始吧,正好跟他对上,这啥意思?是不是就生成了十个数组元素?看看是不是真的这样呢?那我们用declare-A,你看这有没有一个DJ的数组出现了,看懂了吗?也就是说数组的元素是可以自动生成的,不用非得一个一个往里手工加啊,你可以用你各种方法往里加。
26:20
啊,甚至我们还可以用啥呢,用我用这种方式讲。好加了以后你再看。看到了吗?这啥东西是不是就是一个一个的文件名。大家明白了吗?是不是通病符也可以啊,只要你能生成。
27:02
空格隔开的一个一个的元素,它就可以。当然你这嵌入一个命令可以不可以。反号嘛,对吧,啊,比方说。我就想把我当前的IP地址取出来。显示我主机的IP地址name-A。大A和小A现在只有一个,只有一个网卡,那当然这个就呃意义不大了,我换一个吧。那我在这儿把我的用户名取出来。这个里面放了我们的用户名,我用cut冒号取一,这是不是把用户名取出来了啊,当然这个是用回车隔开的,那我就用这个把它隔开,看能不能行。
28:10
然后clear-A。看看IP有没有啊,这个应该写错名字了啊,应该叫用户,不过呢看有没有结果。是不是有结果呀。看懂了吗?所以总之你是有各种方法来生成元素的内容的,而不一定非得手工去一个一个写。是不是?嗯。好,这就是数组的定义。包括数组的查看。啊,这是一次复制我们刚才给大家用过的写法。啊。当然也可以写成这种形式,也可以挑其中的几个元素赋值,甚至我们还可以用这个方法交互式的对变量赋值啊,这也可以叫read-A。
29:13
啊,比方说我们想对咱们学生信息,这是一个数组。啊,来进行布置。那假设小明。小红,小强。旺财是吧,好,你看现在有了,那当然我就都显示一下吧,Clear你看有没有啊。是吧?这不就都有了。啊,交互式的也可以。那这里面呢,需要注意就是刚才强调的一点啊,就是。
30:05
关联数组说的是它的下标是可以自定义格式的。所以换句话说,将来我就想存放学生信息,这个存放学生信息的时候,我希望有一个叫内幕的。下调。这个内容的下标。来存放某个人的姓名啊,那我这儿存。全一个人的性命。啊。随便写一个吧。当然,我这还可以再加一个age,年龄18啊。再来个电话吧,110啊。好。你看这是三个元素,三个元素做完了以后呢,我们想打开其中的一个看,方法是画括号,把它画画括起来。
31:16
出事了。出事了怎么回事啊?我瞧妹怎么110啊,这都是110啊。这就是我们强调的,我现在用的是不是普通数组,普通数组它的下标是数字,而我们现在是自定义格式,它是关联数组。关联数组必须先声明。不声明就乱套了,知道吧啊。所以那要声明,那声明一下吧,怎么声明关联数组来着,大a student。
32:03
行不行呢?出错了,竟然说什么呀,他说他不可以把普通的,所以转换成关联。关联数组,也就是说你原来已经你没定义它就当成普通数组。结果你现在想把它改成过定数,不可以不可以。那不可以不能改,那我怎么办呢?删了呗,啊删怎么删呢?Onset onset啊删变量不就看吗?删函数还是用它。现在杉树组还是用它。啊,那说明一下,哎,这回好了。好了以后呢,我们再来把刚才那个赋值,哎,复制一下ALICE18。
33:07
啊。哦,哎,看看这回好不好。显示一下。诶,对了,现在内蒙能解了吧。这不就行了吗?这关联数组别忘了要声明啊,不声明是不行的。好了,那我们现在已经给大家讲了这个数组的基本的格式了。那大家一定是非常关心,那啥时候用数组啊。数组一般我们边角本用的不多,为什么?因为边角本在生产中我遇到的场景一般是不会太复杂的。如果真的复杂,通常可能有专业的开发语言,比如用Python呢,用Java来做了,那开发人员干的活了,那我们做运维来讲,就是做一些简单的哎,一些脚本之类的脚本,脚本啊,通常来讲功能是没那么要求那么高的,所以你应对的环境也没那么复杂,所以数组呢,我们大部分情况下基本上就用不到,但是。
34:22
用不到不一定就是说你有时候用不到。那有的时候可能还真的需要。所以在这我们还需要知道怎么去用,刚才我们也知道了,怎么去引用啊,啊,怎么去删除啊,这都已经讲过了,另外呢,还有一些就是取数组的所有元素,或者取它的个数,这个呢就是取它的所有元素。所有元素。啊,用这个语法来写,比方说我们就想把student这个数组的所有元素取出来。
35:00
这不就一下取出来了。大家看起来这个星就想起了啥啊,你看它俩功能一样,这不就是我们学的那个Dollar心Dollar艾的符号,那不就是位置参数吗?啊。所以大家想起来了啊,这就是实际上是未知的位置。啊,那这就是所有。啊,我们也可以取它的个数,我想知道这个元素有几个。三个。加个井号,那如果我删除一个,那删除一个怎么删呢?那就是删除其中的。某一个student啊,比方说我把中间的这个age给删了。对。啊,把A给删了,删了以后你再看它的个数是不是就少了一个。
36:00
当然这时候呢,就造成了我们数组的不连续,少了一个。啊,在这呢,你可以用declare看一下。Yeah。我们刚才是student。哪儿去了?呃,因为这是不是关联数组啊啊,关联数组这看不见,关联数组你要看大A,大A看到的是关联数组。在这啊。啊,但是关联数组实际上就谈不上稀疏,谈不上稀疏,因为它本身也不能干数字编号了是吧?哎,所以就谈不上,但是我们刚才那些是可以造成系数的,比方说学生这个小写字母的,那我们可以把其中的学生的这个呃,小强吧,把小强给去了。小强去了以后呢,你再看。是不是0122少了一个。
37:01
啊,少一个造成student这个数组的个数,那这个地方是写括号八括号,然后这个是呃,井号井号。然后前面还有一个。然后是E。啊,现在就少了一个,那这就。大成系数格式。当然,如果不稀疏的话。比方说我们现在这个title title是不系数的,现在我想再增加一个新的岗位在。确保当前数组是非系数格式的情况下,如何在后面再追加一个新的元素呢?
38:05
那当然开头应该是四了吧,但是事实上这个四啊,还得手工写进去,那四怎么来的,是不是事先你查出来的,我们是不是可以把它用方法直接生成。啊,怎么生成啊。直接给它生成啊,井号开口中括号啊。看明白了,这啥意思?这是不是就是元素的个数,元素个数几个,四个我做把四作为新下标。因为现在不是零到三嘛,那我拿这个元素的个数作为新的下标,一个新的下标四,我们说过最高的这个目前元素的这个下标值和数量之间是简易关系。
39:01
对不对,所以我用它是不是就可以作为新的。元素下标了对吧?啊,比方说我们再加一个岗位,再加个啥呢。呃,再加一个。公司里还有什么岗位啊,然后说HR吧。好,那么看看HR加进去了吗?看。进来吧。看懂这个话了吧?这实际上是嵌套啊。这里面呢,实际上就是数组元素的个数是不是。好,这是刚才给大家讲的。好,那数组呢,我们现在基本上把一些比较常用的写法啊,用法也给他说了啊呃。
40:00
呃,这边还有切片的取法。就是我可以对数组切片,切片呢就是比方说我跳过几个前几个,这个就简单了啊,那这个呢,就是跳过前几个取前几个取后几个啊,那比方说我们就以title来说,那title呢,嗯。这加一个。这个A呢,就是它的全部元素。那我要跳过,总共你看我这个title呢,是四个我跳过。一个取两个跳过,第一个是CTO取两个,是不是就取出这两个来了,是不是意思啊啊,所以我们就可以用这么来写冒号隔开。然后是跳过一个取两个。看到没?是不是就是COO和CTO?
41:01
啊,就是切片啊,就是从中去切片。好了,这是咱们给大家讲的。关联数组刚才也说过了。啊,这下面全是事例啊,全是示例,全是示例。好,那现在呢,我们有一些范例,我这个脚本的作用就是要生成十个随机数字。并且把它存放到数组中,而且我要找出里面的最小值和最大值。随机数的生成,我们可以通过red那个含那个,那个有一个变量,它的范围是零到632767之间啊,从中取取一个随机数字。生成十个,然后那生成十个,你是不是要编个循环对吧。哎,然后我还得把这十个里面的数字最小值最大值取出来,那怎么怎么求出最大值最小值,那不是就要比了吧。
42:05
啊,怎么比啊?啊,最简单的逻辑就是我每次生成的时候,我就开始比,不是说生成完了再比。那生成十个再比就有点慢了,我们就生成一个就比,比方说我把第一个随机数生成之后,我就把它作为比较的基准。让他和第二个生成的随机数字进行比较。那第一个数字我就既作为最大值,又作为暂时的最小值,然后生成第二个数字以后,拿它和暂时的最大值、最小值比,如果比暂时的最大值大,它就成了新的暂时的最大。它如果比暂时的最小值要小,它就变成了暂时的最小。然后再开始第三轮,生成随机数。拿这个第三轮的随机数再和暂时的最大值、最小值比,明白了吗?直到把所有的随机数十次都生成完,是不是也就比上了?比完以后那个暂时的最大值、最小值是不是就成了最终的最大值最小值了?
43:10
明白了吧?那这就是他背后的逻辑。那大家看这段代码就是这么实现的。首先声明了两个。数字I呢,是数字啊,这个你可以不声明。我们以前好像也很少声明数字,当然这个不是强制性的数组,叫numbers,当然这个也不是强制性,因为不是关联数组就可以不用声明,不过声明了比较好,因为你声明大家一看是不是就知道,哎,后面当位它是一个数组了。要不你放在那个代码里面啊,说实在你过一段时间看你自己还得琢磨琢磨这啥意思了。是吧,哎,这不就看的清楚了吗?所以声明是个好的习惯,那接着循环十次零到。小于十,小于十不就九了吗?所以是不是就十次加加,然后大家看这个就是我们前面曾经见到过的随机数字。
44:10
它付给numbers Dollar ii呢?是不是就从零开始变?哎,为什么从零变?就因为关联数组就数组恰恰从零开始,所以我们用这个东西不仅起到了循环,而且顺便充当了数组的下标,一举两得,是不是?一举两得啊,所以不要从一开始啊,从一开始,你那下标从零开始,那你不还得减一,你不是多此一举嘛,对吧?哎,所以我们就从零开始。他边循环边提供了数组下标。然后把当前的随机数付给这个当前的下标,然后如果A是零的时候,A是零,那么自然不就是第一个元素吗?第一个元素我们是不是就把它既作为最大值又作为最小值,当然后续的事还要做吗?不用做了,所以叫continue。
45:04
肯定有什么意思,肯定是不是,就是后面的命令不执行了,因为后面的命令是做比较的,你第一次的时候没得比,第一次我就是最大值也是最小值,对不对,所以后面就不用看了,但是如果I已经不是零了,I已经是一了,那这个命令自然就不执行了。不执行了,他就开始拿这个东西来比了,那这个I不就是一吗?那就是NUMBER1和刚才的最大值max比。看看大不大,大好你就成了心大啊,如果你比我们小,那你是不是就变成心小?对吧,那实际上这个地方还可以再加一个,如果成功就直接退出。因为什么你都比我大了,还还用判断小吗?是不是不用判断了。是不是我们加这个代码是不是效率更高一点啊,当然实际上你比也无所谓,完了就是多比一次了,对吧,实际上没有意义了,你直接退出就行了,直接这轮循环就结束了,对不对?当然如果这个不条件不成立,那你不比我的大,那可能就小小的话,是不是我执行一下这个判断还是合理的。
46:11
明白了吧,哎,那这样的话呢,我们经过这数轮以后,这个随机数字就拿出来,它的最大值最小值,那我们来看一看是不是能实现啊,这个是数组。呃,比随机值排序的啊,我们叫S。好,那我们来跑一下看跑完了。生成的随机数在上面都列出来了,你肉眼就能观察出来,最大值和最小值应该是没没问题的吧。这就是一个简单的小例。
47:02
答。这个范例只是让大家练习了一下,那事实上我这儿之前写过。一些脚本,这一些复杂脚本里面就用到了,不过呢,因为我们后面还没。有些技术还没用,还没有讲,比如说我们的证书申请,那过程还没讲啊,所以在这儿可能。列出的。好,我这个也也放到咱们的服务器上去了啊,也可以看一下咱们的服务器。啊。那个福气。在这。在证书。哎,这编了一个脚本,这个脚本里面就用到了数字,好大家看。看,我声明了一个关联数组,看懂了吗?然后这个关联数组它的名称叫英。
48:08
这是证书信息。这个证书咱们没学啊,啊,你可以暂时理解成你的身份证,这你的身份证,身份证我们很多人都有身份证,我这儿希望给三个人颁发身份证,所以我就需要录入三个人的每个人的身份证信息,比方说这个人的身份证A,这个人第一个人的身份证,你的姓名,你的年龄,你的啊这个住址等等吧,都需要。所以这就这个意思,所以大家看我这有SUBJECT0。这是它的下标。然后这是零到这是第一个,我们认为是第一个人的身份信息。这是第二个人的身份信息,只要是一的结尾的都是第二个人,这是不是第三个?
49:06
对吧,这第三个,但是每个人的信息他不一定是一致的,就是每个人的信息不一定是都是都有,比方说有人。身份证。信息里面它不全。所以呢,你看我们这个零结尾的,这是有几个。五六个吧,六个,那你看这有几个。也是六个。七个啊,这多了一个,这个呢。七个是吧,所有的六个有个七个。那那没关系啊,反正我用数字零结尾的就表示是第一个人的。数字一的是不是就第二个人?但是你光写个数字零,数字一没有意义呀,你时间长了,你看这零啥意思呀。所以我这写一个什么。
50:02
是不是就是这个SUBJECT0,零表示是第一个人的,而subject表示零,这个人的什么信息是标题对吧?那么第二个K费就是零这个人的K文件的文件名。啊,那第二个零四就是证书文件的文件名,这个是它的K的长度,然后这是有效期,这是它的。数据的编号,证书编号,你看我们用这种方式是不是就一看就知道这是干嘛了,而既能表示出他们相关的关系,有一定的联系,也能体现出这个是什么意义。这就是三个人的证书吗?这三个人的证书标题是什么?证书文件包括K文件长度等等等,这不都有了吗?对吧,啊,当然这个东西是过年期间写的一个脚本啊,这后来改了,然后这个是当时不是武汉疫情嘛,是吧,有一个有一个人叫李文亮,听说过吧,这个人不是因为喊啊,这个也是叫吹哨人嘛,是吧,叫吹哨人就是公布这个疫情,发了一些这个预警,结果这个人最后也因为疫情的事儿啊死了,去世了。
51:27
这也算是一个给老百姓恩。吹哨的人叫吹哨人。当时他去世以后,我还就写了一个脚本,算是对他的一个借纪念啊纪念。那最早写的?啊,那脚本好慢啊。啊,在在这个地方一键申请这地方,这最早就是针对他写的这个。
52:18
就这个人看见没有,大家应该知道这个人吧,是吧,就是你看这个时间,就是这个时间2月7号,2月7号去世的,然后就是写了一些这个东西,刚开始我没有用数组啊,刚开始我就。就写了,因为是给他颁发证书啊,所以这里面就没有写其他信息,没有用数组,刚开始没有写数据,后来改成数组。啊,下面就别看了,下面你们还没学呢,是颁发证书的命令啊。不过你学完我们安全那一章的时候,你再来看你就知道了,这就是申请证书的整个脚本,否则的话你就手工敲,一条条命令敲,很麻烦的,那你现在要给十个人颁发证书,你要手工去敲,那好多都是交互式的操作,非常烦。
53:08
啊,你就写成啪,十个证书就生成了,非常快啊。八。那这是咱们给大家讲的这个证书的啊,这个数组的用法啊,数组用法,下面这也是个例子,自己看一下就行。这个练习你们自己看一下啊,哎,这有一个比较有意思的两个东西,一个是排序。这个刚才我们说过排序,不过刚才那个实际上没有排序,因为我们只是挑出最大值最小值,我们实际上并没有真的把最大值最小值从小到大,从大较小排序,我没有没有排,那将来你们也许会遇到排序的要求,当然大家说那我们排序,我们学过命令,有一个so的命令可以排,是吧。
54:04
是不是骚扰的命令可以,那如果你让你写一个脚本。用脚本来进行排序。这么快。那脚本排序的话呢,嗯,思路。算法实际上有很多,不过呢,最容易理解的,虽然效率比较低吧,但是比较容易理解啊,那用的什么呢?用的就是这个。哎呀,这个工具换了换了找不着了。画画东西的呢?哎,我那图片儿画画图工具去哪儿了?
55:00
他这个版本升级了,你们升级了吗。这这个软件给升级了,早上一升级找不着那个工具在哪画了。这画中画是摄像头。我这儿没有摄像头啊。怎么?哎,我重新开一下啊。哎,出来了,在这儿呢,你看在这儿。那个工具给变了。好,那现在我开始画图了啊。那假设呢,我们有一大堆数字已经生成了啊,分别就叫abcd。啊,我这么说的话。我们就画四个数字就行了。这个数数字呢,大小不一,现在我们希望把数字从小到大,从大到小排序,其中有一个非常常见的排序算法叫冒泡法。
56:10
虽然我们不是做开发,但是稍微还得懂一点点是吧,开发的一些算法啊,人家一说排序算法,至少你听过啊,不至于说啥都不懂对不对,跟人交流不在一个点上。啊,那冒泡算法是其中一种,事实上有N多种排序算法啊,主流的好像七八种啊,很多。那其中冒画法是最容易理解的,怎么排呢?是这么排,我先拿第一个和第二个笔。谁小或者谁大都行,比方说谁小咱俩就换换位置,比方说A和B相比A最小,好,那咱俩就换位置了,我在你这儿,你在我这儿,咱俩换位置。当然,如果A和BA不比B小,那就不换了呗,啊好,那么比完了以后接着和上一轮再比。
57:08
这这个在比,这个这俩位置在比,A和C在比,注意AB已经挪到下面了了啊,所以这个位置的A和C在比,哎,看看谁小,比方说发现A还小,哎,A还小,那咱俩再换,大家发现没有A是不是不断往上跑,哎,那接着A再和最后这个D比。那如果发现A还小,好,那么大家注意到了吗?是不是A就飘到了最上面,你感觉是不是有点像冒泡的感觉?因为它最轻最小,是不是慢慢的就跑到上面去了。经过多轮比较以后,它就成了第一个了,当然这个比完了以后,这是比完了第一轮,这第一轮比出来只能挑出最小值吧。谁是次小值还不知道呢,所以我们继续比,继续比的话,这个B和C比对不对。
58:04
B和CBB和C比,发现B比C小,好,B就跑到上面来,C就跑到下面去。然后B和D比啊,B如果比D还要小,那他俩再换次序。地就下面来了。那经过四轮比,比到这就行了啊,B不用A比了,因为比过了已经A已经是最小了,所以经过第二轮比,是不是AB已经第一第二比出来了啊,那当然下面这两个你在最后一轮比不就行了吗?比方说C和D比,那发现D本身就小,C不比人家小,那行了,那最终结果不就是这个结果了吗?是不是就出来了?从大到小,从小到大出来了这个结果,这就叫冒泡法,明白了吧?哎,你想想是不是感觉像冒泡的感觉啊?但是这种算法效率不高啊。对于大量数据来讲,比方说我的数据量如果达到很大的规模啊,我们现在才四个,那如果是上百万个呢,外外上亿上亿个呢,那如果你用这种算法,那就太慢了,所以将来如果你们要学Python呀,老师到时候也许会讲一些排序算法啊,那个时候可能会讲一些效率更高的算法啊,不过那个需要费脑筋啊,这个算法实际上你真写出来的话,你要把它写成脚本,估计你也得想一想。
59:30
啊,你说好,说真是,你要把用用脚本来体现出来,是不是还得费点脑筋啊,如果说你掂量一下,觉得自己逻辑思维能力比较差,你这道题可以不做了啊。啊,如果你觉得比较强,你可以试尝试写一写,就用share写,用数组写,知道吧,数组写。这个转置矩阵说的就是换个次序,那原来是123456789,现在呢,以中间这个轴中间斜着画一条轴,然后对调。
60:06
啊,在这个轴上呢,就不动了,不在这个轴上互相的位置斜着对调,二变成四。对调三和七对调六和八对调明白了吗?这就最终变成了147258369。是吧,麻将序列。好,这是对调。怎么对,实际上很简单。没想象那么复杂。那怎么对调啊?实际上就是你把这个腰这个位置,你把它可以设为一个数组,下标为幺幺啥意思,就是第一行第一列。这就是那个第一个数字嘛,那么二是不是就是第一行第二列。三是不是就是第一行第三列。
61:04
而这个四是不是第二行第一列。中间这个是不是二二。所谓对调,不就是这两个数字如果相同,它就在轴上,就不用对对调了,如果两个不同,是不是一二和二一对调数序就行,对不对?不就是这样吗?啊,那将来你这边的一三和三一对嘛,对吧,这边的这个二三和三二队。对调位置分享。中间两个数字如果一样就不对掉了,它固定的不用动。那么再有就是阳灰三角。洋灰三角是一个很著名的数学上的一个。形态是咱们古人。杨杨先生是吧,老。老杨先生。
62:01
啊,这个先生发明的一种数学计算。杨红。杨辉三角。买这已经出来了。啊,圆灰三角啥样呢?随便找一个吧,这个它是一个跟三角形相似的,所以叫三角圆灰三角。它的组成是这样的。排在第一个的数字,咱们叫一。这是一。第二行的时候。是前两行是固定的啊,前两行都约定好了,一一这是固定的,从第三行开始就有计算公式了,什么公式呢?就是第一个数字和最后一个数字都是一。
63:03
而第二个数字不是第一个数字,也不是最后一个数字,它的计算的公式来源是什么呢?是它肩膀上的两个值相加。你看他肩膀上是不是有两个数字是一和一相加,是不是二,而这个数字三,它是不是两个肩膀上一和二相加的结果,这个三是不是这两个肩膀上的数字相加的结果,这就是杨辉三角。啊,阳三角非常适合用数组。因为数组可以表示第几行第几列呀,是不是用数组下标就可以表示,那你的肩膀不就是你的上一行。啊,你像这个三,你这个这个三怎么来的,你这个三不就是你的上一个。行,比方说我现在是第四啊,这个是你这个下行,这是如果按下标,如果数组的话,这是三,标号为三,那标号第三标第三,你是它的上一行,上一行减一嘛,那减一的话,它上面有两个元素,其中这个是比我的这个列还要在前面,我这是第二列,你这是第一列,第一列和第二列相加的值,得到我这个数字是不是。
64:17
这就是公式。这就是三洋绘三角形,当然圆绘三角形你真画出来的话,你不用就非得整齐了啊,你斜着也行,咱们这也有那个写好的脚本,你你们可以参考一下别人怎么写的。那当然。你们就只是。只是。只是看看效果,不要看人家怎么写的。杨杨。你看杨辉。这有1233个脚本。
65:04
啊,这有好几个脚本呢,四个脚本。这四个。好,我把它拖进来。呃,看看你看现在跑一下杨辉。二。啊,这样写个行。要这个脚本还有错?换一个。三。输入行,比方说三行。
66:01
十好。那么。三角。哎,刚才有一个。杨辉,这个没拖进来吗?杨飞。洋灰三角颜灰啊,谢谢这个这个同学,这个这个可能是汉语拼音是吧,不过关,我说怎么没有阳呢,颜灰十。
67:02
不过人家写的好啊,你看他给你凑起来显得就更像一些是吧,那当然他怎么实现呢?用数组实现。你看。那这里面。用到了数组,看到没有用到了数组。这儿用到了数据。没有。看这数怎么拼出来的是吧,那你们下来可以尝试自己写一下是吧,当然写不出来就算了啊,这个稍微有一点点难度吧啊。想写就写,不想就算啊,省得打家打击大家的积极性啊。好,那接下来我们继续来看一下字符串的处理。那字符串处理是这样的,我们在share中有一些字符串处理的高级用法,你用不着自己编写脚本,就可以用share中的切片功能自动实现。
68:07
这个呢就是取这个字符串变量它的字符个数,例如我们这有一个内,我现在想查到这个name,这个变量它有多少个字符长度,那么方法就是画括号,把变量写在里面,再写一个井号。那六个。啊,当然它这个地方写的是字符个数,如果我写汉字呢。那现在请问它是几个?它的值是几?嗯嗯,它字符个数嘛,他管你什么字呢。
69:01
是吧,就是四个啊,你不要想着一个汉字占三个字节是吧?不是字节数,是字符数。啊好,那么这边呢,还可以切片。切片跳过几个前几个啊,比方说。那我们这么来。A到Z,然后是。一。零个啊。这个这个应该可以。
70:03
X。你分开吗?是后面跟一个数字来着,我记得。最大参数一行一个。E。嗯,不能执行了。呃,A点点Z是这个吗。SEQ。这十个数字嘛,SASN1,一个一克,Sa GS。这是一个,那零个呢,不支持。
71:06
不支持林哥,支持林哥呀。这零个就是写了一个零。这不只是零。好,那我现在是这样,我把这个先打出来啊,A点点Z,然后把这个空格呢给它删了。删了删了以后呢,我附到一个变量里去啊,比方说就叫嗯B好,那现在呢,这个变量里面就有内容了。啊,有内容了,有内容完了以后,我们现在想切片啊切片,那切片的话呢,我们可以用刚才的写法跳过几个,前几个,比方说跳过十个,大家看是不是把十个就跳过去了,然后跳过十个取20个。
72:10
啊,这个20个超了没,那么啊,你比方说跳过十个取五个,那么这可以来实现切片,这个写法实际上跟我们刚才讲的那个数组是不是一样的。对吧,数都是一样的,甚至还可以支持负数啊,还支持负的啊,注意这个负的你要写上,记住这必须要加一个空格,你不加空格。Abcd没有效果啊,我们加空格你看就知道有效果了,啥意思?是不是倒数十个啊,倒数十个。好,这是这样的一个逻辑,另外呢,我们还可以加上一个偏移量,偏移量比方说呃,五个。
73:01
哎,看好像又不一样了,这啥意思呀。这啥意思?这个十个。那这是不是就是abcde,这不就正好前五个吗?是不是抛头去尾对吧?比方说我们这样写,大家可能看的清楚啊,那就是前面的五个不要,后面的三个不要,留中间刨头去尾嘛啊刨头去尾。啊,还有这个,这两个都是负的,两个都是负的,呃,而且这个地方有一个空格。啊,这个地方有个空格儿。
74:02
啊,这个空格,看这啥意思。我。那这个负五呢,就是最后的五个,负三呢,就是最后的三个。啥意思啊,就是我留下最后的五个,但是剩下的三个不要。就从剩下的五个里面再把三个点给他删了。就留下最后的两个了,相当于啊,但是这最后的两个不是最后的真正两个是。最后三个以外的两个这个意思,这两个值呢,一定是有大小的,这个值不能超过它的大小。对吧。好,这是。
75:01
还有就是我们用模式可以取字串,这个取子串呢,这个也是很有意义的,将来它可以对变量来取啊,比方说我们可以用这个符号,这个符号呢是这样的,它对你的R这个变量进行啊。取值,从左到右去找,一旦发现出现了这个word关键字,那么他就会删除从头一直到关键字之间,包括这个word之间的所有内容啊,比方说举个例子,像这个这个呢,是个文件的名称,那结果你这写了一个井号星,然后这加了个斜线,那这个井号星加了个斜线,就意味着从左到右找找找找到井斜线,好把它删了,删了以后是不是就哇,斜杠就没了,光留下了一个log message,明白了吧?那也就是说他找到第一个斜斜杠就结束了,那么还有一种呢,就不是找到第一个,是找到所有,也就是我们说的贪婪模式,贪婪模式呢是两个井号加个星,两个井号呢,就是从左到右找,找到第一个斜杠不行,我要找到所有的斜杠好停了,停了以后把它删了,是不是就留下messages了。
76:21
啊,那这就是贪婪模式和非贪婪模式啊。还有这个刚才是从左到右,那么还有从右到左的,从右到左呢,用的是Dollar,就是百分号,百分号这把星号给写在右侧了,星号右侧呢,你就认为是从右往左走啊,你看这个星号是在左边,就是从左往右找啊,所以呢,如果我们写了一个。星号是在右侧,那么它就是从右找,找啥呢?啥时候找到斜杠,啥时候停,哎停住停住把它删了,删了的话呢,就剩下了vlog啊,那当然我们还可以贪婪模式,贪婪模式就是两个白分号,那就一直找,找到最后一个。
77:06
鞋盖上了,上了以后就过来玩,看到吗?那这个将来我们用它可以取一些内容,比方说这是大家比较熟悉的一个网页路径,将来我又可以用井号,井号星冒号,冒号什么意思,就是从左而且贪婪模式,是不是找找找,找到最后一个冒号停住,把它删了,是不是就剩下了这个8080。然后呢,如果是两个百分号,两个百分号加一个冒号星,那冒号星星是在右侧,是不是它就从右往前找,而且贪婪模式一直找,找到最后一个冒号结束,把他杀了,就留下了HDB。那吗?啊,这样的话,我们就可以取一些比较方便的字符串,你看这个取出来一个是端口号,一个就是协议的类型啊协议类型。啊,另外呢,它支持搜索替换,搜索替换就是这个写法,就对这个变量进行搜索,找到这个用这个替换啊,但是它不是一个贪婪模式,那用他拉模式两个斜线就行了。
78:10
啊。那这个它可以表示行首,井号表示行首,那这个表示行尾啊,表示行尾。啊,我们找到以后还可以把它删了,删了就是不写替换的东西就删了,这是找到把它删除,还可以转换大小写,这个转换大写,这个转换成小写,就把这个字符可以变成大写,变成小写啊,比方说我们现在当前这个string是一个小写,我们可以把它转为大写,怎么转呢?就是两个向上的脱字符。向上作字符啊就可以了。那么大。啊,另外呢,这还有高级变量赋值,这个高级变量赋值很有意思啊,啊,它可以因为某一个变量的状态来决定另外一个变量的赋值,你像我们分析一下,第一个一个变量可能会有三个不同的状态,第一这个变量根本不存在,第二这个变量虽然有,但是它负了一个空转空值就是相当相当于没有赋值空值。
79:22
啊,就附了一个比方说空串,空串,那么第三个呢,就相当于我给他附了一个字符串,它是有值的,有具体内容的,那么这两种这三种状态将来可以间接的影响另一个变量,那么所以这个语法呢,就是这样来实现的,大家看Y是个变量,Str呢是一个字符串啊,是一个,这个是是一个变量,也是个变量ES tr呢是一个字符串值啊,是一个值,那么如果str是没有配置的情况下,就是没有这个变量,那么Y的值就是直接等于EPR。那么如果e tr是个空串,那么Y的值就是空串,如果e tr是定义了内容的,它的值就是e tr。
80:08
所以换句话说,VR的值由str决定,Str决定啊,比方说我们现在可以看一下这画括号,减号,中间是减号连连起来的啊。假设我们这边有一个这个这个啊开头。啊,然后画括号,那么这我有一个内变量减号,哎,这给它写一个字符串。这个字符串加减号给隔开啊,比方说这个叫it,那我们这样写它的title的值。是由内幕来决定的。如果内它有值。
81:02
那么它的作用就是把内部的值赋给抬头。那比方说内幕呢,是CTO。那这时候我们看一下这个title的值就是CP,但如果内它没有赋值空的。但是它有变量啊,有这个变量。所以这时候它的值就是个空的,如果内蒙干脆就没有负值,比方说我们把这个内蒙给他删了,是没有这个变量好,这时候它的值就等于it了。所以用这种方式是不是就实现了一个非常复杂的条件判断,根据内幕的变量的值,最终间接的影响了title的值?如果我们没有用这种写法,你用业务条件判断是可以的,但是那个代码会很臃肿,你看第一个指令就完成了很多工作。
82:01
好。当然。下面这个也都是类似的,我在这不展开说了,大家看这个表自己看啊啊另外呢,这还有一些其他的高级变量用法,这个我们你看总结一下declare命令,我们现在学到这这些用法杠选项是不是都应该知道啥意思了?R是不是只读变量I是数字A我们刚说过关联数组,普通数组对不对?哎,F是什么东西,是不是数组啊,这个这个函数。啊,F大F是函数的名称,X呢,是环境变量啊fu这两个没说,我就是定义成大写小写啊,一旦你加L,那么这里边你即使赋给大大的变大的字符串,它也变成给你转换成小写U呢,相反。还有一个呢,叫间接变量的间接赋值,间接的变量赋值是这样的,就是我们有的时候这个一个变量的值。
83:00
它定义完以后。那么我们有可能。我希望是通过另外一种间接的渠道得到它的值啊,比较典型的例子呢,就是这样的一个A命令,这个E命令是这样的啊,相信大家应该曾经想过这样的一个用法,就是我这定义了I的值是十,我现在希望在for循环里面啊,这个N吧NN是十,然后呢,我第希望for循环里面用到这个I啊,相信大家可能曾经用过这个写法。你们是不是尝试这么写过?是不是你这样写这个N是不是十啊。但是这个东西是你想象成生成一到十的序列吗?根本就没有。根本就没有。
84:01
啊,为什么呢?因为你这样写它根本就起不到那个效果。他不会给你展开的。顶多就把那个N变成十而已。因为,但是它是一次性处理。那如果我们希望两次。因为这个是需要两次的,因为你第一次要把它替换成十,第二次再把它当成画括号扩展拆,那为了达到这个目的,我们就用对ever的作用,就是第一次做。替换,第一次先把这变量替换成十,第二次再执行它。这不就行了吗?看明白了吗?他会做两次,第一次先替换变量,第二次再把后面的命令当成命令执行。这就可以了,所以像刚才这个写法或循环里面,我们要想弄,那你再加个对吧,当然这是个命令啊,这个命令呢,你要是这么写啊命令。
85:09
嗯。硬。啊,这应该是有个Apple。啊,这样就可以了。妈。啊,另外呢,我们这还有变量的间接赋值,变量间接赋值说的是什么呢?就是一个变量它的值不是一个字符串,而是另外一个变量的值,而另外一个变量值它有值,现在我要通过第一个变量取到这个值的内容就是间间接的变量估值啊,那么比方说我们这个CEO。它的值是内,而内的值是马哥。现在我希望通过CEO得到马哥的这个字符串的值。那就是间接的电量赋值键,然变量赋值有两种方法可以得到,一个是A,用这种写法直接写第一个变量,加一个斜杠Dollar Dollar就可以把这个值拿出来啊。比方说我们先来试一试。
86:10
啊,内的值是马哥,好,那现在我要通过CEO把马哥的这个值最终取出来,那么方法就是刚才提到的用这个写法。注意这有两个斜线到了到了。嗯,少了一个A,大家看是不是把马哥取出来了,你看我调的是CEO啊,我可没有涉及到内蒙,根本没有用到内幕,但是他怎么实现的呢?这实际上是Dollar CEO CEO是不是变量是内幕啊,但是内蒙完了以后,它本身这个变量,所以是不是还得加个Dollar,但是需要转移啊,转移啊,然后把它认为是叫Dollar内容,然后最终通过这种方式得到,那这是第一种方法,还可以用第二种方法,第二种方法直接写叹号。
87:04
就可以啊,所以我们可以直接这么写,把它放到括号里面,叹号这就可以了,直接就取出来了。这个写法更简洁。啊,就是间接的变量引用啊,啊,这就是咱们给大家讲的这个间接变量引用啊,了解一下啊,这边还有一个叫变量引用的。用法这个意思啊,大家看我这用一个杠N,杠N呢,实际上就是一个。变量引用就我声明了一个开头。这个title的值呢是CUCU的值是。马哥,然后呢,我们这声明了一个杠n ref ref的值就是title的值,Title值不就cuo。然后我们就这个RR呢,就是判断它是不是一个变量引用,因为这个有个杠N啊,所以它就生明的一个变量引用,变量引用呢,我们就打印一下reference啊,就是它是变量引用啊,如果执行,那么它确实是个变量引用,然后呢,把这个ref,这个DOLLAR1打印,打了的话呢,它就把马哥打出来了啊啊,这时候你把Co ET,那么他就再打印,这就打印成别人了,所以这个就是也是个变量引用的间接用法啊,这个呢,作为一个扩展知识吧,因为这个杠R选项是一个系统在S8上新出现的一个东西,咱们之前版本里面没有。
88:31
那这个R。就判断它是不是一个变量引用。啊变利,然后列杠。啊,你看这有一个杠NN呢,就是让它成为变量引用所这个这个写法,这个R这个写法呢,是在四路八上有的,你看在四七上官方里面文档里面还没有提到这个R选项就没有。
89:01
这个新的东西啊,新的东西大家了解一下吧,知道就行了啊好了,关于脚本呢,咱们就给大家介绍到这了,所以到此呢,我们整个脚本编程这一部分就介绍完了,剩下的就是大家要不断的去用了,哎,敲上五百五千行以上,你才能慢慢的渐入佳境,如果你敲代码达不到5000,你就不要说你自己不会写脚本,是因为你还没到明白吧。好了,上午的课咱们就上到这。
我来说两句