首先我要聲明一下,我在虛擬機里照著敲,卻達不到視頻的效果,所以我說一下我對這條語句的看法:外面的[]是條件的標準用法,而次級的[]應該就是說明里面是一個正則表達式(第1點),那么現在我按照里面這個式子的優先級來解釋一下先是“=“右邊,在說右邊之前,我再多幾句:如果就單純的一個正則表達式,那么^a就表示以a開頭的匹配,如果^[^a]表示不以a開頭的匹配,好了,我們再來說這個”=“右邊,首先是一個"~"這在我看來應該是一個取反(按位取反)(第2點),但是我想我應該理解錯了,然后是^[0-9]+表示的是以任意整數開頭并且重復1到n次接著是”=“左邊,${file}(第3點)明顯是用一個變量來接收等號右邊的值,然后再在最前面加上一個”!“,表明是相反的結果,即"!1==0"(C語言)第1點和第2點是否理解正確?第3點${file}是$file的標準用法?然后總結,我總結不了。。。。求大神指出錯誤
1 回答
已采納

onemoo
TA貢獻883條經驗 獲得超454個贊
你的理解有些是對的,不過若你在思考前先看看手冊就更好了,這樣能避免多余的腦補。
一個中括號 [...] 和 兩個中括號 [[...]] 的用法是相似的,它們都是用于條件判斷表達式的,所以常跟在 if 后面作條件判斷之用。 [...] 版本算是內建的功能,而[[...]] 版本是復合命令,除了完全支持 [...] 的功能外,還增加了正則表達式判斷功能。
=~ 運算符就是進行正則表達式判斷之用的,左側的字符串會依右側的正則表達式做匹配,若匹配則結果為true,不匹配則結果為false。 所以這里的 ~ 并不是取反。
那么?${file} 自然也就不是用來接收結果的變量了。?${file} 本身的意義就是很正常的,你不要過多聯想。
${file} 就是一個參數展開,也就是 file 的值。是的,這和 $file 是一樣的,大括號是可選的,目的是明確標明參數。 $file 這樣簡單的情形看不出區別,但假如要展開的參數后面還有別的字符:
比如 $fileabc,我想將 file 參數展開的結果和后面的 abc 連成一個字符串,但 bash 會以為你要展開的參數是 fileabc,這時就可以用大括號將參數標識出來 ${file}abc 這樣就沒問題了。
我猜這里大概是要判斷文件名是否為數字開頭吧...
最前面的感嘆號 !,沒錯,這是將前述的判斷結果取反。
- 1 回答
- 0 關注
- 3548 瀏覽
添加回答
舉報
0/150
提交
取消