Shell语法##*/的作用是什么?${i##*/}与${i}有何差异?
Shell中
##*/的作用及${i##*/}与${i}的差异 ##*/的作用
这是Shell参数扩展里的最长前缀删除语法,具体规则:
${变量##匹配模式}会从变量值的开头开始,匹配符合模式的最长内容并删除,返回剩余部分。- 这里的
*/是匹配模式:*代表任意长度的任意字符,/是路径分隔符,组合后会匹配从字符串开头到最后一个/的所有内容。
${i##*/}与${i}的差异
两者核心差异是是否保留路径前缀,用实例说明更直观:
假设变量 i="/opt/aircrack-ng/tools/test.sh"
${i}:直接返回变量原始值,即完整路径:/opt/aircrack-ng/tools/test.sh${i##*/}:删除从开头到最后一个/的所有内容,只保留文件名部分:test.sh
如果变量i本身是不带路径的文件名(比如i="capture.cap"),两者结果完全一致——因为没有匹配到*/模式,不会删除任何内容。
在脚本场景中,当只需要处理文件名、不需要完整路径时,${i##*/}能快速提取目标文件名,省去手动拆分路径的麻烦。
内容的提问来源于stack exchange,提问作者Irina
相关产品推荐
相关产品推荐

