第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

關(guān)于 if [[ ! ${execshell =~ ^[0-9]+} ]] 有幾點不清楚的地方?

關(guān)于if [[ ! ${execshell =~ ^[0-9]+} ?]] 有幾點不清楚的地方:

[[ ]] 兩個中括號是什么意思?

=~ 這個又是什么意思?我查資料,正則表達式里面沒有~符號?。?/p>

^[0-9]+ 代表的是開頭的字符最少一個是數(shù)字

但是我輸入11111,也會匹配不上,正則表達式不是包含匹配的嗎,11111開頭的第一個數(shù)也是數(shù)字啊,為什么會匹配不上呢?


正在回答

3 回答

可以看下這個

http://www.cnblogs.com/include/archive/2011/12/09/2307905.html


0 回復(fù) 有任何疑惑可以回復(fù)我~

1.加了雙中括號[[ ]]以后,在[[和]]之間所有的字符都不會發(fā)生文件名擴展或者單詞分割,但是會發(fā)生參數(shù)擴展和命令替換,bash把雙中括號中的表達式看作一個單獨的元素,并返回一個退出狀態(tài)碼。

在[[和]]之間支持字符串的模式匹配,使用=~操作符時甚至支持shell的正則表達式。

2.簡單來說,=~ 就是匹配正則表達式用的。

3.你的命令有問題if [[ ! ${execshell =~ ^[0-9]+} ?]],這里大括號錯誤了,應(yīng)該是這樣if [[ ! ${execshell} =~ ^[0-9]+ ?]],大括號是在execshell兩邊的,而且命令里面有!呀,表示的取反,輸入11111后命令就是會返回false呀


0 回復(fù) 有任何疑惑可以回復(fù)我~

第一個,已經(jīng)找到答案了:

知道[[]]的意思了,if [[]]中引用變量不用加 雙引號(")了,而if[]中變量必須加雙引號,如if[ -n "$test" ],不然一些特殊的地方,會出現(xiàn)問題的:

例如:

read -p "Please input number :" execshell

teset=$(echo $execshell | sed 's/[0-9]//g')

if [[ -n $test ]];then

#這里寫成 if [ -n $test ] 和 if [ -n "$test" ] && if [[ -n $test ]] 效果是不一樣的。

exit 1

else

exit 0

fi

這里如果寫成if [ -n $test ],鍵盤輸入: 0 , 然后用echo $? 會輸出 1 (按程序來說不應(yīng)該如此,如果是輸入0的話,test的值應(yīng)該為空才是,$?應(yīng)該輸出0才對,所以像if [ -n ?$test ]這樣寫不對,引用變量在[]中,必須加雙引號,或者用[[]]可以不加雙引號),而寫成 if [ -n "$test" ] 或者 if [[ -n $test ]],鍵盤輸入0,然后用echo $? 才會輸出 0,這樣才會達成程序的要求。

第三個,是我看漏了:

^[0-9]+ 代表的是開頭的字符最少一個是數(shù)字

但是我輸入11111,也會匹配不上,正則表達式不是包含匹配的嗎,11111開頭的第一個數(shù)也是數(shù)字啊,為什么會匹配不上呢??

沒看到elif 后面的語句,說的是如果鍵盤輸入的數(shù)字大于文件數(shù)就退出,所以如果輸入11111確實匹配上了,但是因為大于文件總數(shù)所以退出了。


但是:第二個 =~ 還是沒搞懂是什么意思????

0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報

0/150
提交
取消

關(guān)于 if [[ ! ${execshell =~ ^[0-9]+} ]] 有幾點不清楚的地方?

我要回答 關(guān)注問題
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號