【发布时间】:2012-01-11 05:33:21
【问题描述】:
我正在尝试从我的 bashrc 中的函数的参数的完整路径中获取文件的名称。我不知道任何正则表达式,所以我有点迷茫。我知道我想获得最后一个正斜杠并在那之后使用所有东西,但我不太确定如何去做。然后我想将它存储在我的函数中的一个变量中,稍后我将使用它。
感谢任何帮助!
【问题讨论】:
我正在尝试从我的 bashrc 中的函数的参数的完整路径中获取文件的名称。我不知道任何正则表达式,所以我有点迷茫。我知道我想获得最后一个正斜杠并在那之后使用所有东西,但我不太确定如何去做。然后我想将它存储在我的函数中的一个变量中,稍后我将使用它。
感谢任何帮助!
【问题讨论】:
也许使用basename $file_path
【讨论】:
我想你在找basename
【讨论】:
可能最简单的方法是:
PATH=/my/big/long/path/to/a/little/bitty/file
FILENAME=`basename $PATH`
echo $FILENAME
将输出“文件”
【讨论】:
您应该引用basename 的输入及其输出,以防其中任何一个包含有意义的字符,例如空格。
file_basename="$(basename "$filename")"
【讨论】:
最快的方法是使用变量替换
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,但这会很慢,因为它会启动一个新的子进程。
【讨论】:
basename /foo/bar/ 输出 bar 而x=/foo/bar/; echo ${x##*/} 不输出任何内容。
/foo/bar/ 应该什么都不返回,因为路径中没有文件名。所以逻辑上是正确的。
下面的 awk 命令执行此操作:
259> which cna_update
/vobs/cna/bin/cna_update
262> which cna_update|awk -F"/" '{print $NF}'
cna_update
【讨论】: