shell字串操作詳解_linux shell

來源:互聯網
上載者:User
1、shell變數聲明的判斷

運算式 含義
${var} 變數var的值, 與$var相同
${var-DEFAULT} 如果var沒有被聲明, 那麼就以$DEFAULT作為其值 *
${var:-DEFAULT} 如果var沒有被聲明, 或者其值為空白, 那麼就以$DEFAULT作為其值 *
${var=DEFAULT} 如果var沒有被聲明, 那麼就以$DEFAULT作為其值 *
${var:=DEFAULT} 如果var沒有被聲明, 或者其值為空白, 那麼就以$DEFAULT作為其值 *
${var+OTHER} 如果var聲明了, 那麼其值就是$OTHER, 否則就為null字串
${var:+OTHER} 如果var被設定了, 那麼其值就是$OTHER, 否則就為null字串
${var?ERR_MSG} 如果var沒被聲明, 那麼就列印$ERR_MSG *
${var:?ERR_MSG} 如果var沒被設定, 那麼就列印$ERR_MSG *
${!varprefix*} 匹配之前所有以varprefix開頭進行聲明的變數
${!varprefix@} 匹配之前所有以varprefix開頭進行聲明的變數

* 很簡單,大家試試就明白了,不多說,注意貨幣符號與左花括弧之間不能存在空格,左花括弧不能與變數名間存在空格,變數名不能與判斷符合間有空格。

2、字串操作(長度擷取,讀取,匹配刪除,替換)

運算式 含義
${#string} $string的長度
${string:position} 在$string中, 從位置$position開始提取子串
${string:position:length} 在$string中, 從位置$position開始提取長度為$length的子串
${string#substring} 從變數$string的開頭, 刪除最短匹配$substring的子串
${string##substring} 從變數$string的開頭, 刪除最長相符$substring的子串
${string%substring} 從變數$string的結尾, 刪除最短匹配$substring的子串
${string%%substring} 從變數$string的結尾, 刪除最長相符$substring的子串
${string/substring/replacement} 使用$replacement, 來代替第一個匹配的$substring
${string//substring/replacement} 使用$replacement, 代替所有匹配的$substring
${string/#substring/replacement} 如果$string的首碼匹配$substring, 那麼就用$replacement來代替匹配到的$substring
${string/%substring/replacement} 如果$string的尾碼匹配$substring, 那麼就用$replacement來代替匹配到的$substring

* 需要說明的是substring可以是Regex。

可替代命令:cut sed awk ,這三個是更為強大的字串處理命令,能幹關於字串的非常多事情。這裡有很多範例介紹。

3、效能比較
time for i in $(seq 10000);do a=${#test};done;
time for i in $(seq 10000);do a=$(expr length $test);done;

複製代碼 代碼如下:

real 0m0.181s
user 0m0.170s
sys 0m0.000s

real 0m8.580s
user 0m2.497s
sys 0m6.075s


這裡相當於迴圈調用awk、sed、cut、length等外部命令處理字串,耗時是理所當然的。之前有篇說過shell最佳化問題,這裡不再贅述,shell迴圈比awk慢非常多,這裡的效能測試其實不太有實際意義,具體原因結合shell最佳化那篇看。

4、 字串正則判斷
可以類似使用如下命令:

複製代碼 代碼如下:

if [[ "${lastday?ERR_MSG}" =~ "^[0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2}$" ]]
then
...
fi


據說需要在bash版本3.0以上才能使用,查看bash版本方法為:bash -version ,查看當前解譯器種類命令:echo $0

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.