亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

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

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

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

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

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

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


正在回答

3 回答

可以看下這個

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


0 回復 有任何疑惑可以回復我~

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

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

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

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


0 回復 有任何疑惑可以回復我~

第一個,已經找到答案了:

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

例如:

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

第三個,是我看漏了:

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

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

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


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

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

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

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號