指定通配符时basename命令报错,如何获取未展开的通配符文件名?
如何用basename提取带通配符的文件名
问题根源
shell会在执行basename命令前,先对通配符*进行路径展开。如果/tmp/fi*匹配到多个文件,basename会收到多个路径参数,从而触发"extra operand"错误。
实现方法
通过引号包裹路径阻止shell的通配符展开,让basename直接处理原始带通配符的字符串,命令如下:
# 单引号包裹(推荐,避免额外解析) fname=$(basename -- '/tmp/fi*') # 双引号包裹也可生效 fname=$(basename -- "/tmp/fi*")
执行后,echo $fname会输出fi*,完全符合需求。
内容的提问来源于stack exchange,提问作者user971741
相关产品推荐
相关产品推荐

