2013-05-13 91 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