【发布时间】:2021-06-23 09:05:20
【问题描述】:
我试图在没有路径的情况下列出子目录中的所有文件,我只想要文件名和扩展名,但是 Bash 替换不适用于数组中的所有路径,它只适用于第一个元素.
代码:
#!/usr/bin/bash
NAME="$(pwd | grep -o '[^/]*$')"
# ls src -R
PATH="$(ls src/*.{cpp,hpp} 2> /dev/null)"
if [ 0 -eq "${#PATH[@]}" ]; then
echo "The project has no source code file yet."
exit 0
fi
EMPTY=''
for FILE in "${PATH[@]}"; do
echo "${FILE/src\//$EMPTY}"
done
目录树:
FileReader
├── bin
├── make.sh
├── obj
└── src
├── FileReader.cpp
├── FileReader.hpp
└── main.cpp
预期:
$ bash make.sh
FileReader.cpp
FileReader.hpp
main.cpp
输出:
$ bash make.sh
FileReader.cpp
src/FileReader.hpp
src/main.cpp
【问题讨论】:
-
你能用这个吗-
( cd src ; ls *.{cpp,hpp} ) -
或者找-printf "%f\n"
-
将您的代码粘贴到shellcheck.net
-
看看
dirname,也避免在bash中使用大写变量以避免varname冲突,PATH已经被占用了。代码中的PATH也不是数组。 -
@MrR 感谢您的解决方案,它成功了!
标签: bash scripting text-processing string-substitution