1
您好我有一個小腳本(腳本名稱是:test1.sh),看起來像這樣瞭解Linux的shell腳本表達
PRG=$0
data=`expr $PRG : '.*\/.*'`
echo $data
當我運行此我看到輸出
我無法理解寫在腳本第二行的正則表達式。 這是什麼意思?
您好我有一個小腳本(腳本名稱是:test1.sh),看起來像這樣瞭解Linux的shell腳本表達
PRG=$0
data=`expr $PRG : '.*\/.*'`
echo $data
當我運行此我看到輸出
我無法理解寫在腳本第二行的正則表達式。 這是什麼意思?
表達如果存在腳本($0 in sh
)的文件名相對內的/
返回一個非零值。如果執行如下腳本:sh ../../script.sh
,則輸出15,即「../../script.sh」的總長度。它匹配「../../」與'.*\/
,匹配script.sh
與.*
部分。
If the match succeeds the `:' expression returns the number of characters matched.
所以10很可能
./test1.sh ^^^^^^^^^^ ||||||||| \ 123456789 10
由於提問的是關於正則表達式的含義的問題,它將匹配任意字符的0個或更多個字符,後跟斜槓,後跟0個或多個任意字符。 expr命令特別匹配輸入字符串的開頭。所以這解釋了爲什麼它會匹配整個字符串,如果$ 0 ==「./test1.sh」。還要注意,bash腳本中的$ 0指的是腳本名稱,正如此答案所暗示的。 – 2013-05-13 21:13:25
@Ryan和Steven謝謝澄清。 – Ayusman 2013-05-13 21:57:15