Bash字符串替换,找到父路径

时间:2011-12-01 00:13:16

标签: linux bash unix

我想用bash替换字符串,它将从当前运行程序的路径中找到父路径。

所以我尝试删除所有内容,从最后的'/'到结尾使用正则表达式:

echo ${0#/.*#}

但它不起作用,请不要让我使用外部程序,最好用bash获取所有内容......

谢谢!

2 个答案:

答案 0 :(得分:4)

  

所以我尝试删除所有内容,从最后的'/'到结尾使用正则表达式:

> echo ${0#/.*#}

这不是正则表达式。此外,您不需要哈希字符(删除前缀),但需要%符号(删除后缀)。在任何一种情况下,第二个哈希字符都不应该存在(这是/不是/正则表达式。请参阅bash手册中的PARAMETER EXPANSION章节。)

您可以使用

echo ${a%/*}

打印目录(但如果“$ a”不包含斜杠,则会中断)或

echo ${a##*/}

打印文件(注意双##以删除最长的匹配前缀)(但如果“$ a”本身就是一个目录并且您只想要最后一个组件,则会中断。)

最好使用现有命令

dirname "$a"

basename "$a"

,分别

答案 1 :(得分:2)

你的意思是这样的 -

[jaypal:~/Temp] a="/Volumes/Data/jaypalsingh/Temp/file.txt"
[jaypal:~/Temp] echo ${a%/*}
/Volumes/Data/jaypalsingh/Temp