【问题标题】:Checking if substring is in filename in bash检查子字符串是否在bash的文件名中
【发布时间】:2018-01-30 15:44:30
【问题描述】:

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

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

read -p name 

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

【问题讨论】:

标签: bash


【解决方案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 选项,以使其在这种情况下循环零次。

【讨论】:

    猜你喜欢
    • 2019-02-10
    • 2016-02-24
    • 1970-01-01
    • 2020-11-15
    • 2019-02-27
    • 2022-11-02
    • 2021-11-09
    • 2013-12-13
    • 1970-01-01
    相关资源
    最近更新 更多