16

给定这样的路径test/90_2a5/Windows

我正在尝试使用命令获取结果90_2a5dirname来获取路径,然后basename获取名称。

当我尝试将结果从管道传输到单行时,就会出现dirname问题basename

我已经尝试过了,但似乎我以错误的方式使用它。

path="test/90_2a5/Windows"   
finalName= basename var | dirname $path  
echo "$finalName"

问题是finalName是一个空字符串,这意味着来自的结果dirname没有重定向。

4

4 回答 4

31

您不使用管道传递它们,而是将它们作为参数传递:

finalName=$(basename -- "$(dirname -- "$path")")

一些命令很简单地不接受输入流,而只接受参数:

$ echo foo/bar | basename
basename: missing operand
Try `basename --help' for more information.
$ basename foo/bar
bar
于 2013-05-31T10:49:09.437 回答
29
$ echo 'test/90_2a5/Windows' | xargs dirname | xargs basename
90_2a5
于 2014-07-14T06:51:23.370 回答
2

实际上,您也可以在没有任何外部程序(如dirnameor )的情况下执行此basename操作,只需使用 bash 字符串操作操作:

path="test/90_2a5/Windows"
# delete from last / to end
dir=${path%/*}
# delete from beginning to last /
finalName=${dir##*/}   
echo "$finalName"
于 2013-05-31T11:37:13.363 回答
0

使用 ${path#*/} 去除字符直到第一个 '/'。然后使用 dirname 删除“/Windows”。

finalName=$(dirname ${path#*/})
于 2013-05-31T10:41:13.650 回答