關于 if [[ ! ${execshell =~ ^[0-9]+} ]] 有幾點不清楚的地方?
關于if [[ ! ${execshell =~ ^[0-9]+} ?]] 有幾點不清楚的地方:
[[ ]] 兩個中括號是什么意思?
=~ 這個又是什么意思?我查資料,正則表達式里面沒有~符號啊?
^[0-9]+ 代表的是開頭的字符最少一個是數字
但是我輸入11111,也會匹配不上,正則表達式不是包含匹配的嗎,11111開頭的第一個數也是數字啊,為什么會匹配不上呢?
關于if [[ ! ${execshell =~ ^[0-9]+} ?]] 有幾點不清楚的地方:
[[ ]] 兩個中括號是什么意思?
=~ 這個又是什么意思?我查資料,正則表達式里面沒有~符號啊?
^[0-9]+ 代表的是開頭的字符最少一個是數字
但是我輸入11111,也會匹配不上,正則表達式不是包含匹配的嗎,11111開頭的第一個數也是數字啊,為什么會匹配不上呢?
2016-01-31
舉報
2017-02-06
可以看下這個
2016-06-21
1.加了雙中括號[[ ]]以后,在[[和]]之間所有的字符都不會發生文件名擴展或者單詞分割,但是會發生參數擴展和命令替換,bash把雙中括號中的表達式看作一個單獨的元素,并返回一個退出狀態碼。
在[[和]]之間支持字符串的模式匹配,使用=~操作符時甚至支持shell的正則表達式。
2.簡單來說,=~ 就是匹配正則表達式用的。
3.你的命令有問題if [[ ! ${execshell =~ ^[0-9]+} ?]],這里大括號錯誤了,應該是這樣if [[ ! ${execshell} =~ ^[0-9]+ ?]],大括號是在execshell兩邊的,而且命令里面有!呀,表示的取反,輸入11111后命令就是會返回false呀
2016-02-02
第一個,已經找到答案了:
知道[[]]的意思了,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確實匹配上了,但是因為大于文件總數所以退出了。
但是:第二個 =~ 還是沒搞懂是什么意思????