这个 expr 在 shell 脚本中做什么?

Jim*_*Jim 3 shell-script expr

下面具体做了什么?

newProg=`expr "${newProg}" : ".* -> \(.*\)$"`   
if expr "x${newProg}" : 'x/' >/dev/null; then    
   prog="${newProg}"     
else    
    progdir=`dirname "${prog}"`   
    prog="${progdir}/${newProg}"    
fi   
Run Code Online (Sandbox Code Playgroud)

Mic*_*mer 5

第一行使用expr到:

贪婪匹配语义是这样的,它总是捕获并输出最后一个这样的匹配,所以->输出中永远不会有 a 。

例如,这将解析ls -l符号链接上的输出以找到目标(给定良好的文件名等,通常的警告)。

第二行使用expr一次,以检查新值是否newProg有开始/,也就是,它代表的绝对路径。

在这种情况下,prog只需将其设置为该值。否则,prog使用dirnameon设置为计算的相对路径$prog,此代码段中未定义该变量。其效果大概是构建一条相对于该原始位置的路径。


如果您只针对比纯 POSIX 功能更强大的 shell 或环境,那么可能有比expr. readlink也是一个非常常用的命令,它可以节省解析ls.