这个 expr 在 shell 脚本中起什么作用?

这个 expr 在 shell 脚本中起什么作用?

下面的具体作用是什么?

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

答案1

第一的线路用途expr到:

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

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

第二lineexpr再次用于检查 的新值是否newProg以 a 开头/,即它表示绝对路径。

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


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

相关内容