我有这样的代码:

get_base() { echo "${1##*/}"; }

在我们有1个或更多的数据之前,这种方法运行良好 尾部斜杠

我已经找到了如何修复它的解决方案,但 问题是我们需要启用extglob,而我不需要 想要的是:

ari@ari-gentoo ~ % x='/home/ari///'

ari@ari-gentoo ~ % echo "${x%%+(/)}"
/home/ari

然后,我们可以将其保存到一个临时变量中并运行基本名称 关于它的替换

不管怎样,我的问题是,有没有合适的方法来做这件事 而且它仍然很快(意味着不调用外部命令 因为此函数被调用得相当频繁) 需要启用任何花哨的功能吗?

提前感谢您的回答:)

问答

否,因为所有这些解决方案要么使用命令,要么具有仅go 掉最后一个斜杠而不是倍数的替换表达式:)(例如,当需要为/home/ari时,带有表达式${x%/}的/home/ari//将仅变为/home/ari//)

  • 你说的‘适当’是什么意思?

确切地说,我是指在不启用extglobal或任何其他奇特功能的情况下实现的

推荐答案

这里有一种方法:

get_base() {
  set -- "${1%"${1##*[!/]}"}"
  printf '%s\n' "${1##*/}"
}
$ get_base /home/oguz//
oguz
$ get_base /root
root
$ get_base /

$ get_base .bash_history
.bash_history

Linux相关问答推荐

为什么rsp寄存器从0x7FFFFFFFDFD0开始

Linux 系统调用文档

获取变量中的当前路径并使用它

如何在 Linux 中向应用程序发出信号而不杀死它?

如何在 linux 上为 JNI 应用程序编译动态库?

Linux命令行如何接受没有pin的蓝牙设备配对

为什么在 Linux 中使用 select

无法创建Java虚拟机

带有 curl 的 Linux 脚本来判断 Web 服务是否已启动

为什么导入 SQL 这么慢?

如何从 linux 的命令行将 Sublime Text 2 文件打开到选项卡,而不是新窗口

./studio.sh 之后的 Android Studio 错误

试运行 cron 条目

限制程序在 Linux 中运行的时间

在 PHP / Apache / Linux 环境中,为什么 chmod 777 是危险的?

bash中变量名后的2个逗号是什么意思?

如何运行我所有的 PHPUnit 测试?

如何从 Linux 终端找到特定文件?

在linux中根据内容拆分文件

编辑文件时保留 samba 共享的文件权限