30. Bash Shell - 扩展:花括号(brace)、波浪号(tilde)、参数(parameter)

开篇词

Linux 为我们提供了一些用来重复、打印当前用户工作目录以及对参数操作的扩展。
 

括号扩展

我们可以使用花括号来将类似的内容输出至屏幕:

echo a{d,c,b}e    # 官方的一个例子

打印三个类似的词
另一个例子:

echo M{ike,ichelle,ichael}

打印三个人名
 

波浪号扩展

我们可以通过波浪号来获取主我们的目录:

echo ~

打印当前用户的主目录
我们还可以使用波浪号来查看我们主目录里有什么文件:
打印我们主目录的文件
 

参数扩展

该扩展有多种展现形式:

${param:[operator]word}
${[operator]param}
${param[operator]word}

如果参数为空,使用词

该扩展展现形式如下:

${param:-word}

我们来演示一下:

MY_NAME_HYPHEN='Dong'
echo My name is ${MY_NAME_HYPHEN:-DONG}

由于 MY_NAME_HYPHEN 变量不为空,打印其值

如果参数为空,则替换并使用词

该扩展展现形式如下:

${param:=word}

如果有变量,则使用变量值

MY_NAME_EQUAL='Dong'
echo My name is ${MY_NAME_EQUAL:=DONG}

由于 MY_NAME_EQUAL 变量不为空,打印其值
如果该变量不存在,则使用词并将其赋值给变量:

echo $MY_NAME_EQUAL_NULL    # 我们还未创建该变量,所以其为空
echo My name is ${MY_NAME_EQUAL_NULL:=DONG}    # := 会将 DONG 赋值给 MY_NAME_EQUAL_NULL 变量,因为其为空
echo $MY_NAME_EQUAL_NULL    # 现在,它已经创建好了

打印 DONG 并将其赋值给 MY_NAME_EQUAL_NULL 变量

如果参数不为空,使用词

该扩展展现形式如下:

${param:+word}

如果变量存在,使用词:

MY_NAME_PLUS='Dong'
echo My name is ${MY_NAME_PLUS:+DONG}

由于 MY_NAME_PLSU 变量为非空,打印 DONG
如果变量不存在,什么都不做:

echo MY_NAME_PLUS_NULL    # 我们还未创建该变量,所以其为空
echo My name is ${MY_NAME_PLUS_NULL:+DONG}    # 没有东西可以使用
echo MY_NAME_PLUS_NULL    # 变量 MY_NAME_PLUS_NULL 依然是空的

由于 MY_NAME_PLUS_NULL 变量为空,什么都不打印

将值作为变量名

该扩展展现形式如下:

${!param}

我们可以借助 ! 符号来将变量的值作为另一个变量的名称:

MY_FIRST_NAME="Dong"
MY_NAME='MY_FIRST_NAME'
echo My name is ${!MY_NAME}

结合间接引用特性来打印 MY_FIRST_NAME 变量值

在内容第一次或最后一次出现时将其删除并显示余下内容

该扩展展现形式如下:

${param#*word}

我们可以使用 # 符号来在词第一次或最后一次出现的位置开始删除之前的内容,但这不会对变量本身做变更。
删除词第一次出现的位置之前的内容:

NAMES='Jack:Rose:Marry:John:Anna:Mike'
echo $NAMES
echo ${NAMES#*:}
echo $NAMES

在删除之前取出变量值,在删除之后并没有影响到变量的值
删除词最后一次出现的位置之前的内容:

NAMES='Jack:Rose:Marry:John:Anna:Mike'
echo $NAMES
echo ${NAMES##*:}
echo $NAMES

在删除之前取出变量值,在删除之后并没有影响到变量的值
 

我所撰写的英文版本

30. Bash Shell - Expansions: brace, tilde, parameter
 

引用

参见

想看手册的其他内容?请访问该手册的所属专栏:《Linux 管理员手册:既简单又深刻

发布了103 篇原创文章 · 获赞 6 · 访问量 5066

猜你喜欢

转载自blog.csdn.net/stevenchen1989/article/details/104104292