Bash Shell实现dirname

Bash Shell实现dirname,dirname 命令的作用和你预想的一样,但就像 basename,它也是一个单独的可执行文件,需要在子 shell 中运行。能不能用字符串操作来代替?

解决方案

当然能。用字符串操作删除文件名(路径中的最后一部分),尽可能多地保留路径中的目录部分。

DIR=${MYPATHTOFILE%/*}

讨论

如果变量中保存的是/usr/local/bin/mycmd,我们希望得到的是 /usr/local/bin,同时丢弃最后一部分(文件名)。由于路径中的各个部分是由斜线分隔的,从右侧开始(因为 %)删除匹配模式“斜线之后跟着任意数量字符(/*)”的最短子串(因为只有一个%,而不是两个)即可。

这个示例演示了如何对 shell 变量进行字符串操作。其中并未给出完整的、可兼容的 dirname 命令替代方案,尤其是针对一些路径名以斜线结尾的边缘情况。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!