2013-05-13 93 views
1

您好我有一個小腳本(腳本名稱是:test1.sh),看起來像這樣瞭解Linux的shell腳本表達

PRG=$0 
data=`expr $PRG : '.*\/.*'` 
echo $data 

當我運行此我看到輸出

我無法理解寫在腳本第二行的正則表達式。 這是什麼意思?

回答

1

表達如果存在腳本($0 in sh)的文件名相對內的/返回一個非零值。如果執行如下腳本:sh ../../script.sh,則輸出15,即「../../script.sh」的總長度。它匹配「../../」與'.*\/,匹配script.sh.*部分。

2

From

 
If the match succeeds the `:' 
    expression returns the number of characters 
    matched. 

所以10很可能

 
./test1.sh 
^^^^^^^^^^ 
||||||||| \ 
123456789 10 
+1

由於提問的是關於正則表達式的含義的問題,它將匹配任意字符的0個或更多個字符,後跟斜槓,後跟0個或多個任意字符。 expr命令特別匹配輸入字符串的開頭。所以這解釋了爲什麼它會匹配整個字符串,如果$ 0 ==「./test1.sh」。還要注意,bash腳本中的$ 0指的是腳本名稱,正如此答案所暗示的。 – 2013-05-13 21:13:25

+0

@Ryan和Steven謝謝澄清。 – Ayusman 2013-05-13 21:57:15