所以我有一行代码如:
list=$(find . -maxdepth 1 -name "$1" -print0 | sed 's,\.\/,,g')
echo $list
所以当我做bash script_name string
我希望它会显示包含“string”的所有文件
现在我在一个文件夹中有4个匹配:TesT1.c TesT1.h TesT2.c TesT2.h
当我做的时候
bash script_name TesT*
我的代码只返回第一个匹配,即TesT1.c
我哪里做错了,提前谢谢
答案 0 :(得分:1)
当你这样做时:
bash script_name TesT*
bash在调用脚本时展开TesT*
并将其设为:
bash script_name TesT1.c TesT1.h TesT2.c TesT2.h
由于您只使用$1
,因此您只需:TesT1.c
您需要将脚本称为
bash script_name 'TesT*'
避免扩展glob模式(由于使用单引号)
答案 1 :(得分:0)
当您运行bash script_name TesT*
时,您当前的shell会扩展glob,因此您的运行命令实际上是bash script_name TesT1.c TesT1.h TesT2.c TesT2.h
。
然后您的脚本使用$1
(第一个参数)并运行
find . -maxdepth 1 -name "TesT1.c" -print0 | sed 's,\.\/,,g'
显然只会发现自己。
在初始命令行上引用glob。
bash script_name 'TesT*'
此外,没有理由将find
的输出填充到变量中,然后将其回传出来。