shell中變量的替換

shell中變量的替換

Bash Shell可以進行變量的條件替換,既只有某種條件發生時才進行替,替換 條件放在{}中。

1、${value:-word}

當變量未定義或者值爲空時,返回值爲word的內容,否則返回變量的值.

1

[root@master ~]# echo ${a:-123}   #變量a未定義返回了123

123

[root@master ~]# a=10 && echo ${a:-123}      #定義變量a=10,返回10

10

 

2、${value:=word}

與前者類似,只是若變量未定義或者值爲空時,在返回word的值的同時將word賦值給value

2

[root@master ~]# echo ${b:=20}  #變量b未定義,返回20並把值賦給b

20

[root@master ~]# echo $b    #可以看到,現在變量b的值爲20

20

 

3、${value:?message}

若變量已賦值的話,正常輸出變量的值.否則將消息message送到標準錯誤輸出( 此替換出現在Shell程序中,那麼該程序將終止運行)

3

#c變量沒有定義就會終止程序並輸出後面設置好的提示信息

[root@master ~]# echo ${c:?變量未定義或者未賦值}  

-bash: c: 變量未定義或者未賦值

 

#變量定義了,就會輸出變量的值

[root@master ~]# c=10 && echo ${c:?變量未定義或者未賦值}  

10

 

4、${value:+word}

若變量已賦值的話,其值才用word替換,否則不進行任何替換

4

[root@master ~]# echo ${d:+12}  #可以看到變量d未賦值沒有進行替換

 

[root@master ~]# d=10 && echo ${d:+12}  #給變量d賦值後進行了替換

12

 

5、${value:offset}

${value:offset:length}

從變量中提取子串,這裏offsetlength可以是算術表達式.offset代表偏移量,從第幾個字符開始提取,length是需要提取的字符串的個數。

5

[root@master ~]# e=abcdefghijk && echo ${e:3:2}  #從第3個字符後面開始提取2個字符

de

[root@master ~]# e=abcdefghijk && echo ${e:5:6}  #從第5個字符後面開始提取6個字符

fghijk

 

6、 ${#value}

變量的字符個數

6

[root@master ~]# f=abcde && echo ${#f}  #計算變量f的字符個數

5

 

7、${value#pattern} 和 ${value##pattern}

去掉value中與pattern相匹配的部分,條件是value的開頭與pattern相匹配 ###的區別在於一個是最短匹配模式,一個是最長匹配模式.

7

[root@master ~]# g="hehello heworld" && echo ${g##he}

hello heworld

[root@master ~]# g="hehello heworld" && echo ${g#he}

hello heworld

[root@master ~]# g="hehello heworld" && echo ${g##heworld}

hehello heworld

[root@master ~]# g="hehello heworld" && echo ${g#hehello}

heworld

實驗證明${value#pattern} ${value##pattern}沒有太大區別,都只能從開頭匹配,而且都只能匹配一次。

 

8、${value%pattern} 和${value%%pattern}

和上面的例7類似,只是是從value的尾部和pattern相匹配,%%%的區別與###一樣

8

[root@master ~]# h="hehello heworld" && echo ${g%heworld}

hehello

[root@master ~]# h="hehello heworld" && echo ${g%he}

hehello heworld

[root@master ~]# h="hehello heworld" && echo ${g%%he}

hehello heworld

[root@master ~]# h="hehello heworld" && echo ${g%%ld}

hehello hewor

實驗證明${value%pattern} ${value%%pattern}沒有太大區別,都只能從結尾匹配,而且都只能匹配一次。

 

9、${value/pattern/string} 和${value//pattern/string}

進行變量內容的替換,把與pattern匹配的部分替換爲string的內容,’/’’//’的區別是’/’只進行一次匹配替換,而’//’可以進行多次匹配替換。

9

[root@master ~]# i="hello world" && echo ${i/wo/aa}  #這裏把wo替換成爲aa

hello aarld

[root@master ~]# i="hello world" && echo ${i/o/b}  #這裏把一個o替換成爲b

hellb world

[root@master ~]# i="hello world" && echo ${i//o/b}  #這裏把兩個o都替換成爲b

hellb wbrld


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章