【发布时间】:2012-05-18 14:06:03
【问题描述】:
如果你输入 pwd 你会得到类似的东西:
/home/username/Desctop/myfolder/
最后一部分怎么拍? myfolder 路径。
这一定很简单,但我在 shell 中找不到简单的解决方案。我知道如何在 java 中解决这个问题,但在 shell 中不知道。
谢谢
【问题讨论】:
-
我不认为这是正确的:
pwd的输出不包含尾随/。
如果你输入 pwd 你会得到类似的东西:
/home/username/Desctop/myfolder/
最后一部分怎么拍? myfolder 路径。
这一定很简单,但我在 shell 中找不到简单的解决方案。我知道如何在 java 中解决这个问题,但在 shell 中不知道。
谢谢
【问题讨论】:
pwd 的输出不包含尾随/。
你是对的——这是一个快速的命令:
basename "$PWD"
【讨论】:
$PWD怎么样?
使用basename $(pwd) 是两个无用且昂贵的分叉。
echo "${PWD##*/}"
应该在没有昂贵的分叉的情况下完全在 shell 中完成这个技巧(障碍:对于根目录,这是空字符串)。
【讨论】:
/ 在basename 中被删除(可能不适用于 $PWD 但在其他自定义路径中可能。我仍然会选择这种方法。另一个${VAR%/}(之前)不难。答案+1,还提到了昂贵这个词。
要提取路径的最后一部分,请尝试使用basename...
basename $(pwd);
【讨论】:
你可以使用basename,前提是最后一部分确实是一个目录组件(不是文件):
$ basename /home/username/Desctop/myfolder/
myfolder
【讨论】:
在 Linux 中,有一对命令,dirname 和 basename。 dirname 提取路径的最后部分以外的所有部分,basename 仅提取路径的最后部分。
在这种情况下,使用basename 会做你想做的事:
basename $(pwd)
【讨论】:
function basename {
shopt -s extglob
__=${1%%+(/)}
[[ -z $__ ]] && __=/ || __=${__##*/}
}
basename "$PWD"
echo "$__"
【讨论】: