You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash语句`echo ${full_path##*/}`的含义及能否与readlink单行联用

Bash ${##*/} 语法解释

这是Bash内置的**参数扩展(Parameter Expansion)**功能,不属于正则表达式,是Shell专属的字符串处理语法:

  • 单个#表示从字符串开头删除「最短匹配」的指定模式
  • 两个##表示从字符串开头删除「最长匹配」的指定模式
  • 后面跟的*/就是匹配的模式,含义是「任意字符+斜杠」的组合

举个实际示例:

# 定义带全路径的变量
file_path="/data/project/src/main.py"
# 执行最长前缀匹配删除,移除到最后一个斜杠为止的所有前缀内容
echo ${file_path##*/}
# 输出结果:main.py

这个写法的作用是快速提取全路径中的纯文件名部分,不需要额外调用basename命令,执行性能更好。


与readlink搭配的方法

Bash的参数扩展只能直接作用于变量,不能直接套在命令替换(即$(命令)写法)的结果上,直接写${$(readlink -f test.txt)##*/}会触发语法错误。

如果要在同一行实现效果,有两种可行写法:

  1. 同一行内先把readlink结果赋值给临时变量,再调用参数扩展,用分号分隔语句即可:
    # 示例:直接输出软链接真实路径的纯文件名
    f=$(readlink -f ./softlink); echo ${f##*/}
    
  2. 如果不想引入临时变量,可以把参数扩展逻辑放在子Shell中执行:
    echo $(tmp=$(readlink -f ./softlink); echo ${tmp##*/})
    

内容的提问来源于stack exchange,提问作者anteastra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:54:00