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

Bash - Printf an array containing directories not displaying

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

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: Is a directory

如何正确显示 dir 数组,如下所示:

user/224/csgo/addons/sourcemod
user1/208/csgo/addons/sourcemod
user/209/csgo/addons/sourcemod

替换:

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

与:

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

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

当心包含空格或换行符的目录名称。