我试图创建一个脚本来识别目录中文件的名称,然后检查字符串是否是名称的子字符串。我在bash中执行此操作,无法使用grep
命令。有什么想法吗?
我有以下代码来检查用户提交是否与名称中的文件名或字符串匹配。
read -p name
for file in sample/*; do
echo $(basename "$file")
if [[$(basename "$file") ~= $name]];
then echo "invalid"
fi
done
答案 0 :(得分:1)
您只需将用户输入插入到通配符中即可。
printf '%s\n' sample/*"$name"*
如果您想循环匹配,请尝试
for file in sample/*"$name"*; do
# cope with nullglob
test -e "$file" || break
: do things with "$file"
done
如果您只需要检查名称是否不是现有文件名称的子字符串:
valid=true
for file in sample/*"$name"*; do
test -e "$file" && valid=false
done
echo "$name is valid? $valid"
默认情况下,shell不会展开与任何文件都不匹配的通配符;所以在这种情况下,你的循环将运行一次,但循环变量将不匹配任何现有文件。您可能还想查看Bash中的nullglob
选项,以便在这种情况下将其循环为零。