下面的具体作用是什么?
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
。