Shell 編程基礎之 [ 與 [[ 的異同

來源:互聯網
上載者:User

標籤:style   blog   io   color   ar   使用   sp   檔案   div   

一、簡介

[ 與 test 等價,是 bash 的內部命令,GNU/linux 系統的 coreutils 軟體包通常帶 /usr/bin/test 和 /usr/bin/[ 命令。如果我們不用絕對路徑指 明,通常我們用的都是bash 內建的命令。

[[ 是 bash 關鍵字(據說從2.02起引入對[[的支援)

二、異同分析相同點
  1. 都支援算術比較 ("gt"、"ge"、"eq"、"ne"、"lt"、"le")
    [email protected]:~$ [ 2 -lt 10 ]&&echo true||echo falsetrue
    [email protected]:~$ [ 2 -gt 10 ]&&echo true||echo falsefalse

     

    [email protected]:~$ [[ 2 -lt 10 ]]&&echo true||echo falsetrue
    [email protected]:~$ [[ 2 -gt 10 ]]&&echo true||echo falsefalse
  2. 都支援字串比較("<"、">" 但具體使用有些不同)
    關於字串比較。[...]、[[...]]中都可以對字串進行比較,比較的順序是"字典順序"。對ascii字元來講,碼錶中排列在前的較小,如A<B,A<a, 1<2。再強調一次,這裡只要用了"<"、">",就表示是字串比較,那麼9 > 100為真,因為這實際上等價於‘9’ > ‘100’,9在碼錶中排在1後面,所以字串"9"大於字串"100"。
    [email protected]:~$ [ 2 \< 10 ]&&echo true||echo falsefalse
    [email protected]:~$ [ 2 \> 10 ]&&echo true||echo falsetrue

    注意逸出字元\的使用,否則bash會認為是標準輸出重新導向。

    [email protected]:~$ [[ 2 < 10 ]]&&echo true||echo falsetrue
    [email protected]:~$ [[ 2 > 10 ]]&&echo true||echo falsefalse
  3. 都支援簡單模式的匹配
    [email protected]:~$ [ test = test ]&&echo true||echo falsetrue
    [email protected]:~$ [ test = t*t ]&&echo true||echo falsetrue
    [email protected]:~$ [ test = t..t ]&&echo true||echo falsefalse
    [email protected]:~$ [ test = t??t ]&&echo true||echo falsetrue

     

    [email protected]:~$ [[ test = test ]]&&echo true||echo falsetrue
    [email protected]:~$ [[ test = t*t ]]&&echo true||echo falsetrue
    [email protected]:~$ [[ test = t..t ]]&&echo true||echo falsefalse
    [email protected]:~$ [[ test = t??t ]]&&echo true||echo falsetrue

    模式比對類似檔案名稱的統配符的擴充規則。還要注意等號右端的模式不能用引號括起,使用引用關閉了某些元字元的特殊功能。

 不同點
  1. 邏輯與和邏輯或
    1. [ 邏輯與:-a;邏輯或:-a]
      [ 1 -lt 2 ]:true; [ b > a ]:true
      [email protected]:~$ [ 1 -lt 2 -a b > a ]&&echo true||echo falsetrue
      [email protected]:~$ [ 1 -gt 2 -a b > a ]&&echo true||echo falsefalse
      [email protected]:~$ [ 1 -gt 2 -o b > a ]&&echo true||echo falsetrue
    2. [[ 邏輯與:&&;邏輯或:|| ]]
      [ 1 -lt 2 ]:true; [ b > a ]:true
      [email protected]:~$ [[ 1 -lt 2 && b > a ]]&&echo true||echo falsetrue
      [email protected]:~$ [[ 1 -gt 2 && b > a ]]&&echo true||echo falsefalse
      [email protected]:~$ [[ 1 -gt 2 || b > a ]]&&echo true||echo falsetrue
  2. 命令列參數
    "[["是關鍵字,不會做命令列擴充,所以在[[中"<"與">"不需轉義,但是相對的文法就稍嚴格些。例如在[ ... ]中可以用引號括起操作符,因為在做命令列擴充時會去掉這些引號,而在[[ ... ]]則不允許這樣做
    [email protected]:~$ [ "-z" "" ]&&echo true||echo falsetrue
    [email protected]:~$ [[ "-z" "" ]]&&echo true||echo false-bash: conditional binary operator expected-bash: syntax error near `""‘
  3. 算術擴充
    [[ ... ]]進行算術擴充,而[ ... ]不行,[ ... ]需要使用$(())
    [email protected]:~$ [ 99+1 -eq 100 ]&&echo true||echo false-bash: [: 99+1: integer expression expectedfalse
    [email protected]:~$ [ $((99+1)) -eq 100 ]&&echo true||echo falsetrue
    [email protected]:~$ [[ 99+1 -eq 100 ]]&&echo true||echo falsetrue

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.