測試環境為 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 thought on “Bash Shell Script – 變數 刪除/取代 字串”