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()
回显每个目录各占一行。
当心包含空格或换行符的目录名称。
我找到我需要的所有目录并显示它们:
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()
回显每个目录各占一行。
当心包含空格或换行符的目录名称。