943 瀏覽數

Bash Shell Script – 變數 刪除/取代 字串

測試環境為 Ubuntu 16.04 x64

在 Shell Script Bash $開頭的是變數 (可為 number 數字, character 字元, string of characters 字串)

#

由左至右,刪除符合字串中 最短的 那一個
$(variable#string) 刪除變數 Names 內指定的字串 Ben (可以搭配萬用字元 ? * 等來使用 )

root@ubuntu:~# Names="Benson;BenBen;Ben;Bentley;Benjamin"
root@ubuntu:~# echo $Names
Benson;BenBen;Ben;Bentley;Benjamin
root@ubuntu:~# echo ${Names#Ben*;}
BenBen;Ben;Bentley;Benjamin

Ben*; 可以代表為
Benson;
Benson;BenBen;
Benson;BenBen;Ben;
Benson;BenBen;Ben;Bentley;

那最短的就是 Benson; ,所以前後的差別就是
Benson;BenBen;Ben;Bentley;Benjamin
Benson;BenBen;Ben;Bentley;Benjamin

##

由左至右,刪除符合字串中 最長的 那一個
既然有最短當然也有最長的表示式 ##(由左至右 刪除符合字串中 最長的 那一個)

root@ubuntu:~# echo ${Names##Ben*;}
Benjamin

前面的 Ben*; 最長的代表為 Benson;BenBen;Ben;Bentley; ,所以前後的差別就是
Benson;BenBen;Ben;Bentley;Benjamin
Benson;BenBen;Ben;Bentley;Benjamin

那我想把中間的 Ben 刪除,抱歉應該是做不到

root@ubuntu:~# echo ${Names#Ben;}
Benson;BenBen;Ben;Bentley;Benjamin

對於 Bash 而言 Benson;BenBen;Ben;Bentley;Benjamin 是一整個字串,從左至右並沒有符合 Ben; 這個字串.雖然中間有 Ben; 但是 Bash 的眼裡看到的是 Benson;BenBen;Ben;

%

由右至左,刪除符合字串中 最短的 那一個

root@ubuntu:~# Names="Benson;BenBen;Ben;Bentley;Benjamin"
root@ubuntu:~# echo $Names
Benson;BenBen;Ben;Bentley;Benjamin
root@ubuntu:~# echo ${Names%Ben*}
Benson;BenBen;Ben;Bentley;

由右至左 Ben* 可以代表為
Benjamin
Bentley;Benjamin
Ben;Bentley;Benjamin
BenBen;Ben;Bentley;Benjamin
Benson;BenBen;Ben;Bentley;Benjamin

那最短的就是 Benjamin; ,所以前後的差別就是
Benson;BenBen;Ben;Bentley;Benjamin
Benson;BenBen;Ben;Bentley;Benjamin

%%

由右至左,刪除符合字串中 最長的 那一個

root@ubuntu:~# Names="Benson;BenBen;Ben;Bentley;Benjamin"
root@ubuntu:~# echo $Names
root@ubuntu:~# echo ${Names%%Ben*}

那最長的就是 Benson;BenBen;Ben;Bentley;Benjamin ,所以前後的差別就是 (整行不見)
Benson;BenBen;Ben;Bentley;Benjamin
Benson;BenBen;Ben;Bentley;Benjamin

/舊字串/新字串

由左至右取代符合的第一個字串

ben@ubuntu:~$ Names="Benson;BenBen;Ben;Bentley;Benjamin"
ben@ubuntu:~$ echo $Names
Benson;BenBen;Ben;Bentley;Benjamin
ben@ubuntu:~$ echo ${Names/;/:}
Benson:BenBen;Ben;Bentley;Benjamin

//舊字串/新字串

由左至右取代符合的所有字串

ben@ubuntu:~$ Names="Benson;BenBen;Ben;Bentley;Benjamin"
ben@ubuntu:~$ echo $Names
Benson;BenBen;Ben;Bentley;Benjamin
ben@ubuntu:~$ echo ${Names//;/:}
Benson:BenBen:Ben:Bentley:Benjamin

One Reply to “Bash Shell Script – 變數 刪除/取代 字串”

  1. 自動參照通知: Bash Shell Script – $() , ${} – Benjr.tw

發表迴響