检查子字符串是否在bash

时间:2018-01-30 07:30:13

标签: bash

我试图创建一个脚本来识别目录中文件的名称,然后检查字符串是否是名称的子字符串。我在bash中执行此操作,无法使用grep命令。有什么想法吗?

我有以下代码来检查用户提交是否与名称中的文件名或字符串匹配。

read -p name 

for file in sample/*; do
    echo $(basename "$file")
    if [[$(basename "$file") ~= $name]];
    then echo "invalid"
    fi
done

1 个答案:

答案 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选项,以便在这种情况下将其循环为零。