我找到了我需要的所有目录并显示它们:
mapfile -t sm < <(find /home/user/ -name "sourcemod" -type d| egrep '/home/user/[a-zA-Z0-9]+/[0-9]+/csgo/a$
echo "SourceMod directories:"
printf "%s \n" "${sm[@]}"
echo "==============================================================="
我尝试使用 sed
删除 / home / user /mapfile -t dir < <("${sm[@]}"|sed 's,/home/user/,,')
printf "%s \n" "${dir[@]}"
但我得到了这个输出:
./ main.sh:line 15:/ home / user / john / 224 / csgo / addons / sourcemod:是 目录
如何正确显示 dir 数组,如下所示:
用户/ 224 / CSGO /插件/ sourcemod
用户1/208 / CSGO /插件/ sourcemod
用户/ 209 / CSGO /插件/ sourcemod
答案 0 :(得分:1)
替换:
mapfile -t dir < <("${sm[@]}"|sed 's,/home/user/,,')
使用:
mapfile -t dir < <(printf '%s\n' "${sm[@]}" | sed 's,/home/user/,,')
您要求它执行列表中的第一个目录作为命令,其中参数是列表中的其余目录。使用printf()
回显每个目录。
注意包含空格或换行符的目录名称。