Shell脚本中如何处理find返回路径提取目录名存入数组
解决方案
方案1:调整find命令直接生成目标数组(推荐)
直接通过find的自带参数输出不带父路径的目录名,一步存入数组,避免后续二次处理:
# 适配所有带GNU find的环境,支持含空格的目录名 mapfile -t proj_arr < <(find Un -maxdepth 1 -type d -name 'Proj_*' -printf '%f\n')
其中%f是find自带的格式占位符,代表去除所有路径前缀的文件名/目录名本身;mapfile命令会逐行读取find的输出存入数组,不会因目录名含特殊字符拆分出错。
如果目录名不含空格,也可以用更精简的写法:
proj_arr=($(find Un -maxdepth 1 -type d -name 'Proj_*' -exec basename {} \;))
方案2:基于你已有的$projects变量处理
如果已经把find结果存入了$projects变量,可以用shell原生参数替换批量去除前缀:
# 先把字符串转为临时数组 temp_arr=($projects) # 批量移除每个元素的"Un/"前缀,生成目标数组 proj_arr=("${temp_arr[@]#Un/}")
处理完成后可通过printf '%s\n' "${proj_arr[@]}"打印数组内容验证,结果和你预期的完全一致。
内容的提问来源于stack exchange,提问作者kevin41
相关产品推荐
相关产品推荐

