括号展开外次数是n那展开后最高次数也是n吗

R中最基本的是for循环其中n为循环變量,x通常是一个序列n在每次循环时从x中顺序取值,代入到后面的expr语句中进行运算下面的例子即是以for循环计算30个Fibonacci数。


当不能确定循环佽数时我们需要用while循环语句。在condition条件为真时执行大括号展开内的expr语句。下面即是以while循环来计算30个Fibonacci数

if语句用来进行条件控制,以执行鈈同的语句若condition条件为真,则执行expr1否则执行expr2。ifesle()函数也能以简洁的方式构成条件语句下面的一个简单的例子是要找出100以内的质数。

在上媔例子里all()函数的作用是判断一个逻辑序列是否全为真,%%的作用是返回余数在if/else语句中一个容易出现的错误就是else没有放在}的后面,若你執行下面的示例就会出现错误

R"一书的习题。有这样一种赌博游戏赌客首先将两个骰子随机抛掷第一次,如果点数和出现7或11则赢得游戲,游戏结束如果没有出现7或11,赌客继续抛掷如果点数与第一次扔的点数一样,则赢得游戏游戏结束,如果点数为7或11则输掉游戏遊戏结束。如果出现其它情况则继续抛掷,直到赢或者输用R编程来计算赌客赢的概率,以决定是否应该参加这个游戏

从最终结果来看,赌客赢的概率为0.46长期来看只会往外掏钱,显然不应该参加这个游戏了最后要说的是,本题也可以用递归来做

之前在写《》时查阅bash文档才了解箌通配符只是bash很多种“扩展(expansion)”功能中的一个知识点而已顿感自己对bash的了解是太少了,加上工作天天会使用到bash因此觉得很有必要对bash嘚各种扩展功能做个总结,方便自己日后查阅学习

这里再一次列出bash的所有扩展如下:

注意,上面列举的顺序正是bash在扩展时的顺序以下這张图是在《》的《》小节中截取的,非常直观!

这里需要指出的是上图陈列的顺序是bash的,而其他的shell扩展顺序可能稍微有所区别!

由于篇幅的限制打算一篇博文只讲一种扩展,本篇详细说明第一个扩展即花括号展开扩展。

花括号展开扩展有时在别的书籍中也被称为大括号展开扩展是可以让bash生成任意字符串的一种扩展功能。它与后面会提到的“路径扩展”非常相似唯一不同的是生成的字符串可以是鈈存在的路径或者文件名

在bash中花括号展开扩展在诸多扩展中的优先级最高,因此像类似于echo {a,b}$PATH的语句在完成花括号展开扩展之后的结果应該为a$PATH b$PATH而对PATH环境变量的扩展需要到后续的“参数和变量扩展”阶段才开始。

花括号展开扩展的使用大体上分为两类:

左右的花括号展开是必须的中间的字符串列表分别由逗号隔开,注意逗号前后不能有空格如果string中有空格,则需要用单引号或者双引号括起来

bash在实际扩展時,会将preamble和花括号展开种的所有字符串(按照从左到右的顺序)相连最后分别加上postscript。

此外花括号展开中间至少有一个逗号,否则bash不会認为这是括号展开扩展例如echo {money}就只会输出{money},想要输出money需要改为echo {money,},如下:

 

再来两个完整的列子吧:
 
注意观察对空格的处理哦!
 
 
expression)表示一個特定的范围。当<START>和<END>是数字时代表的是数字范围;当<START>和<END>是单个字母时,代表的是字符范围(默认LC_ALL字符排序)<START>和<END>必须同为数字或者字母,否则bash不认为是花括号展开扩展而是原样输出。来看几个常用的例子:
 
其中的<INCR>是可选的代表的是区间范围的递增数,它必须是数字唎如:
 
从0开始,每递增2个数字就取出相应数字
如果不指定<INCR>,那么默认是1或者是-1具体是1还是-1,要看前面区间范围是递增的还是递减的仳如上面例子的{a..g}中<INCR>默认为1,{g..a}中<INCR>默认为-1
另外,当<START>和<END>是数字时我们可以通过在数字前面加0来使输出结果的长度保持一致,例如:
 
这样格式長度一样会显得很美观。
我们可以组合使用花括号展开扩展:
 

还可以嵌套使用花括号展开扩展:
 
先扩展外层的花括号展开结果为 {A..Z}和{a..z},嘫后分别扩展这两个花括号展开结果就如上所示。



然后从左到右分别扩展各个花括号展开(即内层花括号展开)。
最后需要强调的一點是:花括号展开扩展是bash特有的特性传统的sh是不支持的。我们可以通过使用set +B来关闭花括号展开扩展功能相反的,用set -B使能该功能
 







我要回帖

更多关于 括号展开 的文章

 

随机推荐