开篇词
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}
如果参数为空,则替换并使用词
该扩展展现形式如下:
${param:=word}
如果有变量,则使用变量值
MY_NAME_EQUAL='Dong'
echo My name is ${MY_NAME_EQUAL:=DONG}
如果该变量不存在,则使用词并将其赋值给变量:
echo $MY_NAME_EQUAL_NULL # 我们还未创建该变量,所以其为空
echo My name is ${MY_NAME_EQUAL_NULL:=DONG} # := 会将 DONG 赋值给 MY_NAME_EQUAL_NULL 变量,因为其为空
echo $MY_NAME_EQUAL_NULL # 现在,它已经创建好了
如果参数不为空,使用词
该扩展展现形式如下:
${param:+word}
如果变量存在,使用词:
MY_NAME_PLUS='Dong'
echo My name is ${MY_NAME_PLUS:+DONG}
如果变量不存在,什么都不做:
echo MY_NAME_PLUS_NULL # 我们还未创建该变量,所以其为空
echo My name is ${MY_NAME_PLUS_NULL:+DONG} # 没有东西可以使用
echo MY_NAME_PLUS_NULL # 变量 MY_NAME_PLUS_NULL 依然是空的
将值作为变量名
该扩展展现形式如下:
${!param}
我们可以借助 !
符号来将变量的值作为另一个变量的名称:
MY_FIRST_NAME="Dong"
MY_NAME='MY_FIRST_NAME'
echo My name is ${!MY_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 管理员手册:既简单又深刻》