1 回答

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊
你的理解有些是對(duì)的,不過(guò)若你在思考前先看看手冊(cè)就更好了,這樣能避免多余的腦補(bǔ)。
一個(gè)中括號(hào) [...] 和 兩個(gè)中括號(hào) [[...]] 的用法是相似的,它們都是用于條件判斷表達(dá)式的,所以常跟在 if 后面作條件判斷之用。 [...] 版本算是內(nèi)建的功能,而[[...]] 版本是復(fù)合命令,除了完全支持 [...] 的功能外,還增加了正則表達(dá)式判斷功能。
=~ 運(yùn)算符就是進(jìn)行正則表達(dá)式判斷之用的,左側(cè)的字符串會(huì)依右側(cè)的正則表達(dá)式做匹配,若匹配則結(jié)果為true,不匹配則結(jié)果為false。 所以這里的 ~ 并不是取反。
那么?${file} 自然也就不是用來(lái)接收結(jié)果的變量了。?${file} 本身的意義就是很正常的,你不要過(guò)多聯(lián)想。
${file} 就是一個(gè)參數(shù)展開(kāi),也就是 file 的值。是的,這和 $file 是一樣的,大括號(hào)是可選的,目的是明確標(biāo)明參數(shù)。 $file 這樣簡(jiǎn)單的情形看不出區(qū)別,但假如要展開(kāi)的參數(shù)后面還有別的字符:
比如 $fileabc,我想將 file 參數(shù)展開(kāi)的結(jié)果和后面的 abc 連成一個(gè)字符串,但 bash 會(huì)以為你要展開(kāi)的參數(shù)是 fileabc,這時(shí)就可以用大括號(hào)將參數(shù)標(biāo)識(shí)出來(lái) ${file}abc 這樣就沒(méi)問(wèn)題了。
我猜這里大概是要判斷文件名是否為數(shù)字開(kāi)頭吧...
最前面的感嘆號(hào) !,沒(méi)錯(cuò),這是將前述的判斷結(jié)果取反。
添加回答
舉報(bào)