linux之${}符号详解
${ }通常用于划定变量名的边界,例如
[root@linuxforliuhj ~]# a=java
[root@linuxforliuhj ~]# aa=linux
[root@linuxforliuhj ~]# echo "$aa"
linux
[root@linuxforliuhj ~]# echo "${a}a"
javaa
[root@linuxforliuhj ~]# echo "$a"
java
[root@linuxforliuhj ~]#
当执行echo ”$aa“
的时候系统会打印变量$aa
的值,当执行echo "${a}a"
时打印的是${a}
和字母a
,所以使用中括号{ }来划定变量名的边界。如果不需要为变量名划分边界的话,$a
和${a}
是完全相等的。
除此之外,${ }还有一个重要的功能,就是文本处理,单行文本基本上可以满足你所有需求。
【1】获取字符串长度 ${#a}
[root@linuxforliuhj ~]# a=hello
[root@linuxforliuhj ~]# echo ${a}
hello
[root@linuxforliuhj ~]# echo ${#a}
5
【2】字符串切片${a:b:c}
将字符串变量a从第b个位置开始向后截取c个字符,b是指下标,下标从0开始
[root@linuxforliuhj ~]# a='hello linux!'
[root@linuxforliuhj ~]# echo ${a:0:5}
hello
[root@linuxforliuhj ~]# echo ${a:6}
linux!
[root@linuxforliuhj ~]# echo ${a:6:5}
linux
[root@linuxforliuhj ~]# echo ${a:(-1)}
!
[root@linuxforliuhj ~]# echo ${a:(-5)}
inux!
# 截取从倒数第 5 个字符后的 3 个字符
[root@linuxforliuhj ~]# echo ${a:(-5):3}
inu
【3】替换字符串${a/b/c}
将变量a中的b全部替换为c,开头一个正斜杠为只匹配第一个字符串,两个正斜杠为匹配所有字符。
[root@linuxforliuhj ~]# a='hello linux linux'
#将a中的第一个linux替换为java
[root@linuxforliuhj ~]# echo "${a/linux/java}"
hello java linux
#将a中全部的linux替换为java,使用双斜杠
[root@linuxforliuhj ~]# echo "${a//linux/java}"
hello java java
#替换正则匹配为空
[root@linuxforliuhj ~]# VAR=123abc
[root@linuxforliuhj ~]# echo ${VAR//[^0-9]/}
123
[root@linuxforliuhj ~]# echo ${VAR//[0-9]/}
abc
【4】字符串截取
格式:
${parameter#word} # 删除匹配前缀
${parameter##word}
${parameter%word} # 删除匹配后缀
${parameter%%word}
# 去掉左边,#最短匹配模式,##最长匹配模式。
% 去掉右边,%最短匹配模式,%%最长匹配模式。
[root@linuxforliuhj ~]# URL="http://www.baidu.com/baike/user.html"
#以//为分隔符截取右边字符串
[root@linuxforliuhj ~]# echo ${URL#*//}
www.baidu.com/baike/user.html
#以/为分隔符截取右边字符串,##表示尽可能多的删除,保留最少内容
[root@linuxforliuhj ~]# echo ${URL##*/}
user.html
[root@linuxforliuhj ~]# echo ${URL#*/}
/www.baidu.com/baike/user.html
#以//为分隔符截取左边字符串
[root@linuxforliuhj ~]# echo ${URL%%//*}
http:
#以/为分隔符截取左边字符串,%%表示尽可能多的删除,即保留最少内容
[root@linuxforliuhj ~]# echo ${URL%/*}
http://www.baidu.com/baike
[root@linuxforliuhj ~]# echo ${URL%%/*}
http:
【5】变量状态赋值
${VAR:-string} 如果 VAR 变量为空则返回 string
${VAR:+string} 如果 VAR 变量不为空则返回 string
${VAR:=string} 如果 VAR 变量为空则重新赋值 VAR 变量值为 string
${VAR:?string} 如果 VAR 变量为空则将 string 输出到 stderr
#如果变量为空就返回 hello world!: # VAR=
echo ${VAR:-'hello world!'}
hello world!
#如果变量不为空就返回 hello world!: # VAR="hello"
echo ${VAR:+'hello world!'}
hello world!
#如果变量为空就重新赋值:
VAR=
echo ${VAR:=hello}
hello
echo $VAR
hello
#如果变量为空就将信息输出 stderr: # VAR=
echo ${VAR:?value is null}
-bash: VAR: value is null