我写了一个小脚本,它循环遍历目录(从给定的参数目录开始),并提示其中包含xml
文件的目录。这是我的代码:
#! /bin/bash
process()
{
LIST_ENTRIES=$(find $1 -mindepth 1 -maxdepth 1)
regex="\.xml"
if [[ $LIST_ENTRIES =~ $regex ]]; then
echo "$1"
fi
# Process found entries
while read -r line
do
if [[ -d $line ]]; then
process $line
fi
done <<< "$LIST_ENTRIES"
}
process $1
此代码可以正常工作。但是,如果我将正则表达式更改为\.xml$
以指示它应该在行尾匹配,则结果会有所不同,并且我不会获得所有正确的目录。
这有什么问题吗?
答案 0 :(得分:1)
您的变量LIST_ENTRIES
可能没有.xml
作为最后一个条目。
要进行验证,请尝试echo $LIST_ENTRIES
。
要解决此问题,请在for
周围使用if
:
process()
{
LIST_ENTRIES=$(find $1 -mindepth 1 -maxdepth 1)
regex="\.xml$"
for each in $LIST_ENTRIES; do
if [[ $each =~ $regex ]]; then
echo "$1"
fi
done
# Process found entries
while read -r line
do
if [[ -d $line ]]; then
process $line
fi
done <<< "$LIST_ENTRIES"
}
process $1