shell字串操作(一)——字串變數
阿新 • • 發佈:2019-01-23
一、字串變數定義與賦值
符號意義:
- :空測試 =>空為真
- - 負向測試 =>不存在為真
- + 正向測試 =>存在為真
- = 賦值
- ?有問題,錯誤
表示式 | 含義 | 示例 |
---|---|---|
var=string var='string' var="string" |
直接定義並賦值 string單引號包起來:原樣輸出 string雙引號包起來:特殊符號和變數解析 |
var=hello,world! =>hello,world! var=hello,world!\n =>錯誤 var="hello,world!\n" =>hello,world!(換行) |
var=$(cmd) var=`cmd` |
定義並取得命令返回值 | var=$(whereis ls) var=`whereis ls`(舊式寫法) |
$var ${var} |
變數var的值 | echo $var echo "hello,${var}" |
${var-string} | 如果var沒有被宣告, 那麼就以string作為其值 (var不被賦值) |
echo ${var1-$var} =>hello,world! echo ${var1-'aaa'} =>aaa |
${var:-string} |
如果var沒有被宣告或其值為空, 那麼就以string作為其值 (var不被賦值) |
var1='' echo ${var1:-$var} =>hello,world! echo ${var1:-'aaa'} =>aaa |
${var:=string} | 如果var沒有被宣告或其值為空, 那麼就以string賦值給var |
echo ${var:='abs'} =>abs echo ${var} =>abs |
${var:?string} | 如果var沒有被宣告或其值為空, 那麼以string作提示並終止指令碼 |
${var2:?'不能為空'} =>var:不能為空 |
${var:+string} | 如果var沒有被宣告或其值為空, 則返回空,反之則返回string |
echo ${var:?'不為空'} =>不能空 echo ${var2:+'不為空'} => |
二、字串變數屬性
#字串長度 ${#var}
var="hello,world!"
echo ${#var} # 12
三、字串運算
運算子 | 含義 |
示例 a="hello" b="hello,world!" |
---|---|---|
= | 檢測兩個字串是否相等,相等返回 true。 | [ $a = $b ] =>false |
!= | 檢測兩個字串是否相等,不相等返回 true。 | [ $a != $b ] =>true |
-z | 檢測字串長度是否為0,為0返回 true。 | [ -z $a ] =>false |
-n | 檢測字串長度是否為0,不為0返回 true。 | [ -n $a ] =>true |
str | 檢測字串是否為空,不為空返回 true。 | [ $a ] =>true |
=~ | 檢測字串是否包含(正則試算),包含返回為true | [ $b =~ $a ] =>true |
四、字串拼接
#直接放到一起或用雙引號即可,示例:
a=hello
b=world
c=$a$b # $c = helloworld
c=$a" "$b # $c = hello world
c="$a $b!" # $c = hello world!
五、字串切片
表示式 | 含義 |
示例 var="hello,world!" |
---|---|---|
${var:n} | 取第n個字元後面的字串 | echo ${var:3} =>lo,world |
${var:n:m} | 取第n個字元後面開始的m個字元 | echo ${var:3:5} =>lo,wo |
${var: -n} | 從末尾開始取n個字元,注意:與-之間的空格 | echo ${var: -3} =>rld |
${var:m:-n} |
從第m個字元至從末尾的第n個字元 |
echo ${var:3:-3} =>lo,wo |
${var: -n:m} | 從末尾開始取n個字元,取m個字元 | echo ${var: -6:3} =>,wo |
${var: -n: -m} | 從倒數第n個取到倒數第m個 | echo ${var: -6: -1} =>,worl |
${var%.*}(非貪婪) ${var%%.*}(貪婪) |
刪除VALUE字串中以分隔符“.”匹配的右邊字元,保留左邊字元 “*”表示萬用字元,用於匹配字串將被刪除的字串(下同) |
${var%,*} =>hello |
${var#*.}(非貪婪) ${var##*.}(貪婪) |
刪除VALUE字串中以分隔符“.”匹配的左邊字元,保留右邊字元 | ${var#*.} =>world! |
${var/OLD/NEW}(非貪婪) ${var//OLD/NEW}(貪婪) |
用NEW子串替換VALUE字串中匹配的OLD子串。 | ${var/world/Keven} =>hello,Keven! |