【Shell】變數的取用、刪除、取代與替換

來源:互聯網
上載者:User

標籤:

——來自《鳥哥的Linux私房菜》

——總結做方便查閱之用

變數的取用: echo

echo $variable
echo $PATH
echo ${PATH}

變數的配置規則
1.變數與變數內容以一個等號『=』來連結,如下所示:
  『myname=VBird』

2.等號兩邊不能直接接空格符,如下所示為錯誤:
  『myname = VBird』或『myname=VBird Tsai』

3.變數名稱只能是英文字母與數字,但是開頭字元不能是數字,如下為錯誤:
  『2myname=VBird』

4.變數內容若有空格符可使用雙引號『"』或單引號『‘』將變數內容結合起來,但
雙引號內的特殊字元如 $ 等,可以保有原本的特性,如下所示:
  『var="lang is $LANG"』則可得『lang is en_US』
單引號內的特殊字元則僅為一般字元 (純文字),如下所示:
  『var=‘lang is \$LANG‘』則得『lang is \$LANG』

5.可用跳脫字元『 \ 』將特殊符號(如 [Enter], $, \, 空格符, ‘等)變成一般字元;

6.在一串命令中,還需要藉由其他的命令提供的資訊,可以使用反單引號『`命令`』或 『$(命令)』。特別注意,那個 ` 是鍵盤上方的數字鍵 1 左邊那個按鍵,而不是單引號! 例如想要取得核心版本的配置:
  『version=\$(uname -r)』再『echo \$version』可得『2.6.18-128.el5』

7.若該變數為擴增變數內容時,則可用"\$變數"或\${變數} 累加內容,如下所示:
  『PATH="$PATH":/home/bin』

PS.我一般用\${變數},在變數拼接的時候尤其重要,name=\$nameyes,name的內容是\$nameyes 這個變數;name=\${name}yes,可以把\$name和yes拼接起來

8.若該變數需要在其他子程式運行,則需要以 export 來使變數變成環境變數:
  『export PATH』

9.通常大寫字元為系統預設變數,自行組態變數可以使用小寫字元,方便判斷 (純粹依照使用者興趣與嗜好) ;

10.取消變數的方法為使用 unset :『unset 變數名稱』例如取消 myname 的配置:
  『unset myname』

 

變數內容的刪除、取代與替換

範例一:先讓小寫 path 自訂變數配置的與 PATH 內容相同
  path=${PATH}
  echo $path
  /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

範例二:假設要將前兩個目錄刪除掉,如何顯示?

  echo ${path#/*kerberos/bin:}
  /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

解釋:

範例三:我想要刪除前面所有的目錄,僅保留最後一個目錄

  echo ${path##/*:}
  /root/bin

多加了一個 # 變成 ## 之後,變成『刪除掉最長的那個資料』

  • # :符合取代文字的『最短的』那一個;
  • ##:符合取代文字的『最長的』那一個

如果想要『從後面向前刪除變數內容』呢? 這個時候就得使用百分比 (%) 符號了

範例四:我想要刪除最後面那個目錄,亦即從 : 到 bin 為止的字串

  echo ${path%:*bin}
  /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

範例五:那如果我只想要保留第一個目錄呢?

  echo ${path%%:*bin}
  /usr/kerberos/sbin

瞭解了刪除功能後,接下來談談取代吧

範例六:將 path 的變數內容內的 sbin 取代成大寫 SBIN:
  echo ${path/sbin/SBIN}
  /usr/kerberos/SBIN:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
這個部分就容易理解的多了!關鍵詞在於那兩個斜線,兩斜線中間的是舊字串,後面的是新字串

  echo ${path//sbin/SBIN}
  /usr/kerberos/SBIN:/usr/kerberos/bin:/usr/local/SBIN:/usr/local/bin:/SBIN:/bin:/usr/SBIN:/usr/bin:/root/bin
如果是兩條斜線,那麼就變成所有符合的內容都會被取代

總結

變數配置方式 說明
${變數#關鍵詞}
${變數##關鍵詞}
若變數內容從頭開始的資料符合『關鍵詞』,則將符合的最短資料刪除
若變數內容從頭開始的資料符合『關鍵詞』,則將符合的最長資料刪除
${變數%關鍵詞}
${變數%%關鍵詞}
若變數內容從尾向前的資料符合『關鍵詞』,則將符合的最短資料刪除
若變數內容從尾向前的資料符合『關鍵詞』,則將符合的最長資料刪除
${變數/舊字串/新字串}
${變數//舊字串/新字串}
若變數內容符合『舊字串』則『第一箇舊字串會被新字串取代』
若變數內容符合『舊字串』則『全部的舊字串會被新字串取代』

 

變數的測試與內容替換

在某些時刻我們常常需要『判斷』某個變數是否存在,若變數存在則使用既有的配置,若變數不存在則給予一個常用的配置。

範例一:測試一下是否存在 username 這個變數,若不存在則給予 username 內容為 root
  echo $username
        <==由於出現空白,所以 username 可能不存在,也可能是Null 字元串
  username=${username-root}
  echo $username
  root     <==因為 username 沒有配置,所以主動給予名為 root 的內容。
  username="vbird tsai" <==主動配置 username 的內容
  username=${username-root}
  echo $username
  vbird tsai   <==因為 username 已經配置了,所以使用舊有的配置而不以 root 取代

範例二:若 username 未配置或為空白字串,則將 username 內容配置為 root
  username=""
  username=${username-root}
  echo $username
      <==因為 username 被配置為空白字串了!所以當然還是保留為空白字串!
  username=${username:-root}
  echo $username
  root   <==加上『 : 』後若變數內容為空白或者是未配置,都能夠以後面的內容替換!

變數配置方式 str 沒有配置 str 為空白字串 str 已配置非為空白字串
var=${str-expr} var=expr var= var=$str
var=${str:-expr} var=expr var=expr var=$str
var=${str+expr} var= var=expr var=expr
var=${str:+expr} var= var= var=expr
var=${str=expr} str=expr
var=expr
str 不變
var=
str 不變
var=$str
var=${str:=expr} str=expr
var=expr
str=expr
var=expr
str 不變
var=$str
var=${str?expr} expr 輸出至 stderr var= var=$str
var=${str:?expr} expr 輸出至 stderr expr 輸出至 stderr var=$str

 

【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.