溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

shell條件判斷中單個(gè)中括號(hào)和霜中括號(hào)有什么需要

發(fā)布時(shí)間:2020-07-21 14:33:52 來源:網(wǎng)絡(luò) 閱讀:307 作者:露露simile 欄目:編程語言

  1、單中括號(hào) []

    ①bash 的內(nèi)部命令,[和test是等同的。如果我們不用絕對(duì)路徑指明,通常我們用的都是bash自帶的命令。if/test結(jié)構(gòu)中的左中括號(hào)是調(diào)用test的命令標(biāo)識(shí),右中括號(hào)是關(guān)閉條件判斷的。這個(gè)命令把它的參數(shù)作為比較表達(dá)式或者作為文件測試,并且根據(jù)比較的結(jié)果來返回一個(gè)退出狀態(tài)碼。if/test結(jié)構(gòu)中并不是必須右中括號(hào),但是新版的Bash中要求必須這樣。

    ②Test和[]中可用的比較運(yùn)算符只有==和!=,兩者都是用于字符串比較的,不可用于整數(shù)比較,整數(shù)比較只能使用-eq,-gt這種形式。無論是字符串比較還是整數(shù)比較都不支持大于號(hào)小于號(hào)。如果實(shí)在想用,對(duì)于字符串比較可以使用轉(zhuǎn)義形式,如果比較"ab"和"bc":[ ab \< bc ],結(jié)果為真,也就是返回狀態(tài)為0。[ ]中的邏輯與和邏輯或使用-a 和-o 表示。

    ③字符范圍。用作正則表達(dá)式的一部分,描述一個(gè)匹配的字符范圍。作為test用途的中括號(hào)內(nèi)不能使用正則。

    ④在一個(gè)array 結(jié)構(gòu)的上下文中,中括號(hào)用來引用數(shù)組中每個(gè)元素的編號(hào)。

 2、雙中括號(hào)` `

    ①[[是 bash 程序語言的關(guān)鍵字。并不是一個(gè)命令,` ` 結(jié)構(gòu)比[ ]結(jié)構(gòu)更加通用。在[[和]]之間所有的字符都不會(huì)發(fā)生文件名擴(kuò)展或者單詞分割,但是會(huì)發(fā)生參數(shù)擴(kuò)展和命令替換。

    ②支持字符串的模式匹配,使用=~操作符時(shí)甚至支持shell的正則表達(dá)式。字符串比較時(shí)可以把右邊的作為一個(gè)模式,而不僅僅是一個(gè)字符串,比如[[ hello == hell? ]],結(jié)果為真。` ` 中匹配字符串或通配符,不需要引號(hào)。

    ③使用` `.``.``.` `條件判斷結(jié)構(gòu),而不是[ ... ],能夠防止腳本中的許多邏輯錯(cuò)誤。比如,&&、||、<和> 操作符能夠正常存在于` `條件判斷結(jié)構(gòu)中,但是如果出現(xiàn)在[ ]結(jié)構(gòu)中的話,會(huì)報(bào)錯(cuò)。比如可以直接使用if [[ $a != 1 && $a != 2 ]], 如果不適用雙括號(hào), 則為if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ]。

    ④bash把雙中括號(hào)中的表達(dá)式看作一個(gè)單獨(dú)的元素,并返回一個(gè)退出狀態(tài)碼。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI