Shell-變數高階用法

wonbin發表於2020-01-03

變數替換和測試

變數替換

語法 說明
${變數名#匹配規則}} 從變數開頭進行規則匹配,將符合最的資料刪除
${變數名##匹配規則}} 從變數開頭進行規則匹配,將符合最的資料刪除
${變數名%匹配規則}} 從變數尾部進行規則匹配,將符合最的資料刪除
${變數名%%匹配規則}} 從變數尾部進行規則匹配,將符合最的資料刪除
${變數名/舊字串/新字串}} 變數內容符合舊字串,則第一個舊字串會被新字串取代
${變數名//舊字串/新字串}} 變數內容符合舊字串,則全部的舊字串會被新字串取代
[wonbin@localhost ~]$ variable_1="I love you,Do you love me"
[wonbin@localhost ~]$ echo $variable_1
I love you,Do you love me
[wonbin@localhost ~]$ var1=${variable_1#*ov}  // 從頭開始,最短匹配
[wonbin@localhost ~]$ echo $var1 
e you,Do you love me
[wonbin@localhost ~]$ echo ${variable_1##*ov}  // 從頭開始,最長匹配
e me
[wonbin@localhost ~]$ echo ${variable_1%ov*}  // 從尾部開始,最短匹配
I love you,Do you l
[wonbin@localhost ~]$ echo ${variable_1%%ov*}  // 從尾部開始,最長匹配
I l

wonbin@localhost ~]$ echo $PATH
/usr/local/php/bin:/usr/local/nginx/sbin:/usr/local/mysql/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/local/go/bin:/usr/local/go/bin:/home/wonbin/.local/bin:/home/wonbin/bin:/home/wonbin/.config/composer/vendor/bin
[wonbin@localhost ~]$ echo ${PATH/bin/BIN}    // 單個替換
/usr/local/php/BIN:/usr/local/nginx/sbin:/usr/local/mysql/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/local/go/bin:/usr/local/go/bin:/home/wonbin/.local/bin:/home/wonbin/bin:/home/wonbin/.config/composer/vendor/bin
[wonbin@localhost ~]$ echo ${PATH//bin/BIN}   // 全部替換
/usr/local/php/BIN:/usr/local/nginx/sBIN:/usr/local/mysql/BIN:/usr/local/BIN:/usr/BIN:/usr/local/sBIN:/usr/sBIN:/usr/local/go/BIN:/usr/local/go/BIN:/home/wonBIN/.local/BIN:/home/wonBIN/BIN:/home/wonBIN/.config/composer/vendor/BIN

變數測試

變數配置方式 str沒有配置 str為空字串 str 已配置且非空
var=${str-expr} var=expr var= var=$str

字串處理

計算字串長度

語法 說明
方法一 ${#string}
方法二 expr length "$string" string如有空格,則必須加雙引號
[wonbin@localhost ~]$ echo ${#var_str}
11
[wonbin@localhost ~]$ echo `expr length "$var_str"`
11

獲取子串在字串中索引的位置

語法 說明
expr index $string $substring 查詢子串中任一出現的字元,找到第一個出現字元的位置就返回

查詢字元 u 或 x 的位置(哪個字母先出現就計算哪個):

[wonbin@localhost ~]$ string="everything is just beginning"
[wonbin@localhost ~]$ echo `expr index "$string" ux`
16

計運算元串長度

語法 說明
expr match $string $substring 字串左邊從頭開始匹配,
[wonbin@localhost ~]$ string="did you do exercise today ?"
[wonbin@localhost ~]$ echo `expr match "$string" do`
0
[wonbin@localhost ~]$ echo `expr match "$string" "did you"`
7
[wonbin@localhost ~]$ echo `expr match "$string" did.*`
27

注意expr indexexpr match 實際中用的並不是很多

提取字串

語法 說明
方法一 ${string:position} 從 string 中的 position 位置開始,索引下標從 0 開始
方法二 ${string:position:length} 從 position 開始,匹配長度為 length
方法三 ${string: -position} 從右邊開始匹配, 注意冒號後面的空格
方法四 ${string:(position} 從左邊開始匹配
方法五 expr substr $string $position $length 從position開始,匹配長度為length,索引下標從1 開始
[wonbin@localhost ~]$ var_str="kubernetes docker cloudNative  promethus"[wonbin@localhost ~]$ echo ${var_str: 3}
ernetes docker cloudNative promethus
[wonbin@localhost ~]$ echo ${var_str:3:5}  // 方法二, 開始位置3, 長度5
ernet
[wonbin@localhost ~]$ echo ${var_str: -5}  // 方法三,冒號後必須加空格
ethus
[wonbin@localhost ~]$ echo ${var_str: -5:3}  // 方法三, 帶長度
eth
[wonbin@localhost ~]$ echo ${var_str:-5}   // 方法三,冒號後不加空格無效
kubernetes docker cloudNative promethus
[wonbin@localhost ~]$ echo ${var_str:(-5)}  // 方法四,冒號後不加空格的話,可以使用括號
ethus
[wonbin@localhost ~]$ echo `expr substr "$var_str" 1 5`   // 方法五, 索引從開始1計數
kuber
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章