我似乎无法在我的bash脚本中使用正则表达式来运行:
#!/bin/bash
cd /var/lib/gitolite/repositories
for D in *; do
if [ -d "${D}" ]; then
if [["${D}" = [^[0-9A-Za-z\-_].git$] ]]; then
echo "${D}"
fi
fi
done
目录的可能名称:
test.git
test-admin12.git
test_admin.git
test_admin.git.bkp (these are the folders I DON'T want)
我不想启动辅助流程,例如:sed或grep或ls
答案 0 :(得分:2)
而不是:
if [["${D}" = [^[0-9A-Za-z\-_].git$] ]]; then
echo "${D}"
fi
使用此条件并使用正确的语法和正确的正则表达式:
[[ "${D}" =~ ^[0-9A-Za-z_-]+\.git$ ]] && echo "${D}"
答案 1 :(得分:1)
如果启用扩展模式,则可以编写单个glob以匹配有效目录。
shopt -s extglob
for D in +([[:alnum:]_-]).git/; do
echo "$D"
done
符号+(...)
与一个或多个封闭模式匹配。括号匹配单个字母数字字符,下划线或连字符之一(如果它是括号中的最后一个字符,则不需要转义)。尾部斜杠限制与目录匹配。
答案 2 :(得分:1)
这对我有用(对你的if语句略有改动):
for D in *; do
if [ -d "${D}" ]; then
if [[ ^[0-9A-Za-z_-]*\.git$ ]]; then
echo "${D}"
fi
fi
done