![这个 expr 在 shell 脚本中起什么作用?](https://linux22.com/image/115452/%E8%BF%99%E4%B8%AA%20expr%20%E5%9C%A8%20shell%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E8%B5%B7%E4%BB%80%E4%B9%88%E4%BD%9C%E7%94%A8%EF%BC%9F.png)
下面的具体作用是什么?
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
。