1. 程式人生 > >shell字串操作(一)——字串變數

shell字串操作(一)——字串變數

一、字串變數定義與賦值

符號意義:

  • :空測試    =>空為真
  • -  負向測試 =>不存在為真
  • + 正向測試 =>存在為真
  • = 賦值
  • ?有問題,錯誤
表示式 含義 示例

var=string

var='string'

var="string"

直接定義並賦值

string單引號包起來:原樣輸出

string雙引號包起來:特殊符號和變數解析

var=hello,world!          =>hello,world!

var=hello,world!\n       =>錯誤
var='hello,world!\n'      =>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!