我有这样的代码:
get_base() { echo "${1##*/}"; }
在后面有一个或多个斜杠之前,这种方法可以正常工作
我已经找到了一个解决方案来解决这个问题,但问题是我们需要启用extglob
,而我不希望这样:
ari@ari-gentoo ~ % x='/home/ari///'
ari@ari-gentoo ~ % echo "${x%%+(/)}"
/home/ari
然后,我们可以obv将其保存到一个临时变量中,并在其上运行基本名称替换
无论如何,我的问题是,有没有什么合适的方法来做到这一点,它仍然是快速的(这意味着没有调用外部命令,因为这个函数被调用了很多),而不需要任何花哨的功能启用?
感谢提前给出的答案:)
问题和答案
否,因为所有这些解决方案要么使用命令,要么具有仅去除最后一个斜杠而不是倍数的替换表达式:)(例如,带有expr ${x%/}的/home/ari///在需要为/home/ari时将仅变为/home/ari//)
- 你说的“适当”是什么意思
我所说的“适当”是指“在不启用extglob或任何其他花哨功能的情况下实现”
3条答案
按热度按时间vdzxcuhz1#
这里有一种方法:
第一个
kdfy810k2#
一个快速而正确的方法来获得...在狂欢
作为对oguz ismail's correct answer的补充,我建议对这种函数使用
-v
标志,以减少分叉:这使您可以通过以下方式尝试此功能
但是为了将结果存储到某个变量中,您应该避免无用的fork,如
并使用首选语法:
要成为 * 拆分 *
entry
和path
的函数,请执行以下操作:然后道:
和
带有空格的Unicode文件名:
eqqqjvef3#
思路: