我想用bash替换字符串,它将从当前运行程序的路径中找到父路径。
所以我尝试删除所有内容,从最后的'/'到结尾使用正则表达式:
echo ${0#/.*#}
但它不起作用,请不要让我使用外部程序,最好用bash获取所有内容......
谢谢!
答案 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