符號(hào):${}
除了引用變量外饲窿,${}
還有一個(gè)重要的功能煌寇,就是文本處理,單行文本基本上可以滿足你所有要求逾雄。
2.1 獲取字符串長度
? ~ VAR='Hello, world!'
? ~ echo $VAR;
Hello, world!
? ~ echo ${#VAR}
13
? ~
2.2 字符串切片
格式:
${parameter:offset}
${parameter:offset:length}
截取從offset個(gè)字符開始阀溶,向后length個(gè)字符腻脏。
#截取hello字符串
? ~ VAR='Hello World!'
? ~ echo ${VAR:0:5}
Hello
#截取wo字符串
? ~ echo ${VAR:6:2}
Wo
#截取World字符串
? ~ echo ${VAR:5}
World!
#截取最后一個(gè)字符
? ~ echo ${VAR:(-1)}
!
#截取最后2個(gè)字符
? ~ echo ${VAR:(-2)}
d!
#截取從倒數(shù)第3個(gè)字符后的2個(gè)字符
? ~ echo ${VAR:(-3):2}
ld
2.3替換字符
格式:${parameter/pattern/string}
? ~ VAR='hello world world!'
#將第1個(gè)world替換為WORLD
? ~ echo ${VAR/world/WORLD}
hello WORLD world!
#將全部world替換為WORLD
? ~ echo ${VAR//world/WORLD}
hello WORLD WORLD!
? ~ VAR=123abc
#替換正則匹配為空:
? ~ echo ${VAR//[^0-9]/}
123
? ~ echo ${VAR//[0-9]/}
abc
patterm 前面開頭一個(gè)正斜杠為只匹配第一個(gè)字符串,兩個(gè)正斜杠為匹配所有字符淌哟。
2.4 字符串截取
格式:
${parameter#word}
${parameter##word}
${parameter%word}
${parameter%%word}
#
去掉左邊迹卢,最短匹配模式,
##
最長匹配模式徒仓。
%
去掉右邊腐碱,最短匹配模式,
%%
最長匹配模式掉弛。
? ~ URL="http://www.baidu.com/baike/user.html"
#以//為分割症见,截取右邊字符串
? ~ echo ${URL#*//}
www.baidu.com/baike/user.html
#以/為分隔符截取右邊字符串
? ~ echo ${URL##*/}
user.html
#以//為分隔符截取左邊字符串
? ~ echo ${URL%%//*}
http:
#以/為分隔符截取左邊字符串
? ~ echo ${URL%/*}
http://www.baidu.com/baike
#以.為分隔符截取左邊
? ~ echo ${URL%.*}
http://www.baidu.com/baike/user
#以.為分隔符截取右邊
? ~ echo ${URL%.*}
http://www.baidu.com/baike/user
2.5 變量狀態(tài)賦值
${VAR:-string} ${VAR:+string} ${VAR:=string} ${VAR:?string}
如果 VAR 變量為空則返回 string
如果 VAR 變量不為空則返回 string
如果 VAR 變量為空則重新賦值 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}
zsh: VAR: value is null
${}
主要用途大概就這么多了,另外還可以獲取數(shù)組元素殃饿,在后面會(huì)分享到谋作。