在bash中,( )与 ``(反引号)都是用来作命令替换的。 命令替换与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行。
示例: echo
(
l
s
)
执
行
过
程
:
s
h
e
l
l
扫
描
一
遍
命
令
行
,
发
现
了
(ls) 执行过程:shell扫描一遍命令行,发现了
(ls)执行过程:shell扫描一遍命令行,发现了(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出, 再将此输出放到原来命令 echo $(ls)中的
(
l
s
)
位
置
,
即
替
换
了
(ls)位置,即替换了
(ls)位置,即替换了(ls),再执行echo命令。
一般情况下,
v
a
r
与
var与
var与{var}是没有区别的,但是用${ }会比较精确的界定变量名称的范围。 示例:
语法:
${var#pattern},${var##pattern} 从左边开始匹配,即去掉左边
${var%pattern},${var%%pattern} 从右边开始匹配,即去掉右边
${var%pattern} ,${var#pattern} 表示最短匹配,匹配到就停止,非贪婪
${var%%pattern},${var##pattern} 是最长匹配
语法的pattern支持通配符 - *
:表示零个或多个任意字符 - ?:表示零个或一个任意字符 - […]:表示匹配中括号里面的字符 - [!..]:表示不匹配中括号里面的字符
示例:获取路径、文件名及后缀 注意:
- 对于#来说,通配符在前边,待查找的字符在后边
- 对于*来说,通配符在后边,待查找的字符在前边
示例:
说明:
${param:-val}、${param:=val}
当变量为空时,把默认值赋值给了变量。这是一种给变量赋默认值的常见做法。
示例: