Bash - Printf包含不显示目录的数组

时间:2015-04-21 13:50:17

标签: bash sed printf

我找到了我需要的所有目录并显示它们:

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

1 个答案:

答案 0 :(得分:1)

替换:

mapfile -t dir < <("${sm[@]}"|sed 's,/home/user/,,')

使用:

mapfile -t dir < <(printf '%s\n' "${sm[@]}" | sed 's,/home/user/,,')

您要求它执行列表中的第一个目录作为命令,其中参数是列表中的其余目录。使用printf()回显每个目录。

注意包含空格或换行符的目录名称。