Shell 處理字串和{}操作

來源:互聯網
上載者:User

標籤:

 

Shell 處理字串和{}操作

1. 擷取變數的長度

擷取字串長度的方法大概有4種:(以hello world 為例)

  • 通過 wc -L

     $ echo "hello world" | wc -L    11
  • 通過expr length string

    $ expr length "hello world"11
  • 通過awk內建的length函數

    $ echo "hello world" | awk ‘{print length($0)}‘11
  • 通過echo ${#string_name}

    $ string=‘hello world‘$ echo ${#string}11
2. 截取變數 by {}操作
  • # 操作符 -- 從最左邊開始到第一次出現子字串的地方,全部刪除

    $echo $stringhello world$echo ${string#*l}lo world$echo ${string#*ll}o world$echo ${string#*llo}world$echo ${string#llo}hello world

注意: 這裡需要用*來匹配,否則就像最後一個一樣無效,另外倒數第二中把開頭的空格去掉了,這個應該是shell的一種預設賦值,會將變數開頭的空格去掉。例如:

$str1=" hello"$echo $str1hello
  • ##是從最左邊開始匹配到最後出現子字串的地方

    $echo ${string##*l}d
  • %是從最右邊開始匹配到第一個出現子字串的地方,*號放在匹配子字串的右邊

    $echo ${string%l*}hello wor
  • %%是從最右邊開始匹配到最後出現子字串的地方

    $echo ${string%%l*}he
  • ${string:m:n} 操作

注意:

左邊第一個下標用 0 表示
右邊第一個下表用 0-1 表示,右邊第二個用 0-2 表示, 依次類推n 表示字元的個數,不是下標
${string:3} 這裡的3表示從左邊第4個開始

$echo $stringhello world$echo ${string:0:2}he$echo ${string:0-2:2}ld$echo ${string:2}llo world
3. 參數替換和擴充 -- by {} 操作
  • ${str-value} 如果str沒有被申明,則賦值value

  • ${str:-value} 如果str沒有被申明或者值為空白,則賦值value

    $var=$echo ${var-helo}   -- 此時變數var為空白$echo ${var:-helo}helo
  • ${str+value} 如果不管str為何值,均使用value作為預設值

  • ${str:+value} 除非str為空白,否則均使用value作為預設值

  • ${str=value} 如果str沒有被申明,則使用value作為預設值,同時將str賦值為value

  • ${str:=value} 如果str沒有被申明,或者為空白,則使用value作為預設值,同時將str賦值為value

  • ${str?value} 如果str沒有被申明,輸出value到STDERR

  • ${str:?value} 如果str沒有被申明,或者為空白,輸出value到STDERR

  • ${!var} 間接變數引用

    $echo $stringhello world$str="string"$echo ${!str}hello world
  • ${!prefix*} 匹配之前所有以prefix開頭申明的變數

  • ${[email protected]} 匹配之前所有以prefix開頭申明的變數

    $cat test.sh c_var1="hello"c_var2="world"for c in ${!c_*}; do    echo "${c}=${!c}"done$sh test.sh c_var1=helloc_var2=world
4. 字串替換 -- by {}操作
  • ${string/str1/str2},用str2替換從左邊數第一個str1

  • ${string//str1/str2},用str2替換全部str1

  • ${string/#str1/str2},如果string的首碼是str1,則將其替換為str2

  • ${string/%str1/str2},如果string的尾碼是str1,則將其替換為str2

    $echo ${string/l/s}heslo world$echo ${string//l/s}hesso worsd$echo ${string/#he/h}hllo world$echo ${string/%ld/d}hello word

 

Shell 處理字串和{}操作

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.