【发布时间】:2017-03-26 05:47:25
【问题描述】:
如何获取这些字符串中的文件?
/home/streaming/demo/youtube/Surf9B.mp4
/home/streaming/demo/Surf9B.mp4
/home/streaming/demo/youtube/test/Surf9B.mp4
我只需要获取Surf9B.mp4 并存储在一个新变量中。
【问题讨论】:
如何获取这些字符串中的文件?
/home/streaming/demo/youtube/Surf9B.mp4
/home/streaming/demo/Surf9B.mp4
/home/streaming/demo/youtube/test/Surf9B.mp4
我只需要获取Surf9B.mp4 并存储在一个新变量中。
【问题讨论】:
$ basename /home/streaming/demo/youtube/Surf9B.mp4
Surf9B.mp4
$ file=`basename /home/streaming/demo/youtube/Surf9B.mp4`
$ echo "$file"
Surf9B.mp4
【讨论】:
echo "$file" 比 echo $file 更安全:如果不使用引号,如果文件名包含 IFS 中的任何字符,它们将被替换为空格;如果文件名可以解释为 glob,则如果存在扩展结果,则将其替换为扩展结果(如果不存在结果,则行为在很大程度上取决于 shell 选项配置:failglob 和 nullglob 都适用)。
您可以尝试类似的方法,但您的名称中不能包含“/”。
SOME_VAR=$(echo "/home/streaming/demo/youtube/Surf9B.mp4" | rev | cut -f1 -d'/' | rev)
echo $SOME_VAR
【讨论】:
$() 分叉一个子进程,然后rev、cut 和第二个rev 也是额外的外部工具...所以一个总共四个个新程序,只是为了做一些bash内置的东西?!
filename=/home/streaming/demo/youtube/Surf9B.mp4; echo "${filename##*/}"
rev 不是 POSIX 的一部分,不是 bash 的一部分,甚至不是 Linux 标准库的一部分,因此不能保证它会安装在任何给定的系统上。