shell腳本變量操作


使用#或%替換shell中的變量

定義變量:

pth=/abc/aab/abcabc/abcd/cb.txt

 

變量替換(支持通配符但不支持正則表達式):

${var#pattern}:刪除變量var中左邊第一個能匹配到pattern左邊的字符

# echo ${pth#*bc}
/aab/abcabc/abcd/cb.txt

 

${var##pattern}:刪除變量var中左邊最后一個能匹配到pattern左邊的字符

# echo ${pth##*abcd}
/cb.txt

 

${var%pattern}:刪除變量var中右邊第一個能匹配到pattern右邊的字符

# echo ${pth%ab*}
/abc/aab/abcabc/

 

${var%pattern}:刪除變量var中右邊第一個能匹配到pattern右邊的字符

# echo ${pth%%ab*}
/

 

測試通配符和正則表達式:

pth=/abc/aab/abcabc1/abcd/cb.txt

# echo ${pth##*abc[![:digit:]]}
/cb.txt

# echo ${pth##abc+*}
/abc/aab/abcabc1/abcd/cb.txt

記憶:鍵盤上#在%左邊,所以#是去掉左邊的字符,%是去掉右邊的字符,兩個總比一個長

切片

# echo ${pth}
/abc/aab/abcabc/abcd/cb.txt

${var:start:[stop]}:從下標[start,stop)提取變量,下標從0開始,stop可以不給,表示取到結尾。注意是左閉右開的區間,

# echo ${pth:0:4}
/abc

# echo ${pth:4:4}
/aab

# echo ${pth:4}
/aab/abcabc/abcd/cb.txt

# echo ${pth:4}
/aab/abcabc/abcd/cb.txt

變量替換

${var/pattern_string/target_string} :將匹配的第一個pattern_string變為target_string

# echo ${pth/ab/}
/c/a/cc/cd/cb.txt

 

${var/pattern_string/target_string} :將匹配的所有pattern_string變為target_string

# echo ${pth//ab/}
/c/a/cc/cd/cb.txt

賦值變量

${var-target_string} :假如$var沒有設置,使用target_string作為返回值。(空值和非空值不做處理)

# path=/usr/bin/abc
# echo ${path-/usr/local/bin/abc}
/usr/bin/abc

# path=
# echo ${path-/usr/local/bin/abc}

# unset path
# echo ${path-/usr/local/bin/abc}
/usr/local/bin/abc

 

${var:-target_string} :假如$var沒有設置或者為空值,使用target_string 作為返回值。(非空值不做處理)

# path=/usr/bin/abc

# echo ${path:-/usr/local/bin/abc}
/usr/bin/abc

# path=

# echo ${path:-/usr/local/bin/abc}
/usr/local/bin/abc

# unset path

# echo ${path:-/usr/local/bin/abc}
/usr/local/bin/abc

 

${var+target_string} :假如$var為非空值或者為空值,使用target_string 作為返回值。(沒有設定時不做處理)

# path=/usr/bin/abc
# echo ${path+/usr/local/bin/abc}
/usr/local/bin/abc

# path=

# echo ${path+/usr/local/bin/abc}
/usr/local/bin/abc

# unset path

# echo ${path+/usr/local/bin/abc}

 

${var:-target_string} :假如$var為非空值,使用target_string 作為返回值。(空值和未設定時不做處理)

# path=/usr/bin/abc

# echo ${path:+/usr/local/bin/abc}
/usr/local/bin/abc

# path=

# echo ${path:+/usr/local/bin/abc}

 
# unset path

# echo ${path:+/usr/local/bin/abc}

 

${var=target_string} :當var未設置時,使用target_string作為返回值,並且將target_string負值給var。(空值和非空值不做處理)

# path=/usr/bin/abc
# echo ${path=/usr/local/bin/abc}
/usr/bin/abc

# echo ${path=/usr/local/bin/abc}
 

# unset path
# echo ${path=/usr/local/bin/abc}
/usr/local/bin/abc

 

${var:?target_string} :當var未設置或為空值時,將target_string輸出至標准錯誤(非空值不做處理)

# path=/usr/bin/abc

# echo ${path:?/usr/local/bin/abc}
/usr/bin/abc

# path=

# echo ${path:?/usr/local/bin/abc}
-bash: path: /usr/local/bin/abc

# unset path

# echo ${path:?/usr/local/bin/abc}
-bash: path: /usr/local/bin/abc

${var:?target_string} :如果var沒有設定,將target_string輸出至標准錯誤(空值和非空值不做處理)

 

獲取變量長度 ${#var}

# path=/usr/bin/abc

# echo ${#path}
12

數組操作

定義數組

# array=("abc" "bcd" "abccd" "acde")

獲取數組的所有元素 ${array[@]} 或者 ${array[*]}

# echo ${array[@]}
abc bcd abccd acde

# echo ${array[*]}
abc bcd abccd acde

 

獲取數組元素個數 ${#array}

# echo ${#array}
3

 

獲取數組中某個元素的長度 ${#array[下標]}

# echo ${#array[2]}
5

 

給數組的某個元素賦值array[下標]=value

# array[1]="def"

# echo ${array[*]}
abc def abccd acde

 

刪除數組中的元素 unset array[下標]

# unset array[0]

# echo ${array[*]}
def abccd acde

 

數組分片訪問 ${array[@]:n:m} 從第n個元素開始,取m個元素

# echo ${array[*]}
def abccd acde

# echo ${array[*]:1:2}
def abccd

 

替換數組元素內容

# echo ${array[*]}
def abccd acde

# echo ${array[2]/c/f}        將第二個元素的第一個c替換成f
abfcd

# echo ${array[2]//c/f}       將第二個元素中所有的c替換成f
abffd

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM