2011-12-02 112 views
2

我想从我的bashrc中的函数的参数的完整路径获取文件的名称。我不知道任何正则表达式,所以我有点失落。我知道我想获得最后一个斜线,然后使用所有内容,但我不太确定如何去做。然后我想将它存储在函数中的一个变量中,稍后我将使用它。从Unix中的完整路径获取文件名

任何帮助表示赞赏!

回答

9

的最快方式是使用变量替换像

f1=/my/big/long/path/to/a/little/bitty/file 
f2=./my/big/long/path/to/a/little/bitty/file 
f3=my/big/long/path/to/a/little/bitty/file 
f4=file 

echo ${f1##*/} 
echo ${f2##*/} 
echo ${f3##*/} 
echo ${f4##*/} 

# This is how you get value out 
filename=${f1##*/} 

输出;

file 
file 
file 
file 

您可以使用basename但是这将是缓慢的,因为它会推出一个新的子进程。

+2

干得漂亮!替代基本名称! –

+3

当路径名称是以'/'结尾的目录时,它的行为与基本名称不同。这可能会或可能不会成为问题,具体取决于使用情况。 'basename/foo/bar /'输出**栏**,而'x =/foo/bar /; echo $ {x ## * /}'不输出任何内容。 – Flimzy

+1

如果你试图提取文件名,那么'/ foo/bar /'应该不会返回任何内容,因为路径中没有文件名。所以逻辑上它是正确的。 – havexz

4

也许使用basename $file_path

2

也许最简单的方法是:

PATH=/my/big/long/path/to/a/little/bitty/file 
FILENAME=`basename $PATH` 
echo $FILENAME 

将输出 '文件'

1

您应同时报出输入到basename和它的输出,以防其中任何一个具有有意义的字符,如空格在其中。

file_basename="$(basename "$filename")" 
0

以下awk命令这是否:

259> which cna_update 
/vobs/cna/bin/cna_update 
262> which cna_update|awk -F"/" '{print $NF}' 
cna_update