shell基础(10)展开:1)大括号展开-一次创建多个文件、2)参数展开-设定默认值
文章目录
- 一. 大括号展开
- 1. 基础语法
- 1)一次打印多个字串:
- 2)指定空字符串
- 3)一次创建多个目录
- 2. 连续展开
- 连续展开多个字串
- 二. 参数展开:默认值替换
- 1. 设定默认值
- 2. 变量赋值
- 3. 未赋值报错
展开的含义:
shell中有很多称为元字符(meta character)的特殊符号,比如*和{}等。这些元字符具有替换字符串的功能。我们将这种功能称为展开。
一. 大括号展开
1. 基础语法
大括号展开是指一次指定多个字符串的方法,语法如下:
{字符串1,字符串2,字符串3}
例子:
1)一次打印多个字串:
$echofile-{1001,1002}.txt file-1001.txt file-1002.txt2)指定空字符串
{}里面不仅可以记录任意多个元素,而且元素可以是空字符串。
$echofile-{1001,1002,old,new,}.txt file-1001.txt file-1002.txt file-old.txt file-new.txt file-.txt3)一次创建多个目录
$mkdirwork/project/{src,log,test}2. 连续展开
如下语法以两个连续点号的形式书写,那么大括号展开的结果为连续的从“开始值”到“结束值”的数或者字符。
{开始值..结束值}连续展开多个字串
数字的连续
$echofile-{8..11}.txt file-8.txt file-9.txt file-10.txt file-11.txt字符的连续
$ echo file-{c..f}.txt file-c.txt file-d.txt file-e.txt file-f.txt
还可以在…后面加上1个数来指定增量:
$echofile-{8..11..2}.txt file-8.txt file-10.txt二. 参数展开:默认值替换
1. 设定默认值
语法 :-参数展开
${变量名:-值}未定义变量则展开为默认值
$echo${name:-miyake}miyake ←----- 未定义变量,所以展开为 miyake $name=okita ←----- 为变量 name 赋值 $echo${name:-miyake}okita ←----- 变量值为非空字符串,直接展开为该变量值2. 变量赋值
如果变量名没有被赋过值,那么就先设定变量的值,然后再展开此值。
$echo${name:=miyake}miyake ←----- 变量 name 没有被赋值,因此会展开为 miyake $echo$namemiyake ←----- 变量 name 被赋值为"miyake"$name=okita $echo${name:=miyake}okita ←----- 变量 name 的值为非空字符串,因此展开为该变量值 $echo$nameokita ←----- 变量 name 的值没有发生变化3. 未赋值报错
:?是用于在变量没有被赋值时进行错误处理的符号。
${ 变量名:?值 }如果“变量名”的值是非空字符串,则直接展开为该变量值
如果是空字符串,则“值”的内容将被输出到标准错误输出,shell脚本也会立即停止运行。
$cd${dir:?You must specify directory}-bash: dir: You must specify directory这时,cd命令本身也不会被执行。