如何测试破折号文件名中的字符(或字符串)

How to test for a character (or string) in a filename in dash

我有一个字符串(实际上是一个文件名),我想测试它们是否包含一个字符:

NEEDLE="-"
for file in mydirectory/*
do
   if [NEEDLE IS FOUND IN STRING]
   then
       # do something
   else
       # do something else
   fi
done

基本上这与 String contains in Bash 是同一个问题,除了破折号而不是 bash(理想情况下是 shell 中立的,无论如何破折号代码通常都是这种情况)

破折号中不存在 [[ 运算符,因此该问题的答案无效。

您可以在 for loop:

中使用 grep -q
NEEDLE="-"
for file in mydirectory/*; do
    if grep -q "$NEEDLE" "$file"; then
       echo "do something"
    else
       echo "do something else"
    fi
done

使用 case 语句,无需生成外部程序:

NEEDLE="-"
for file in mydirectory/*; do
    case "$file" in
        *"$NEEDLE"*) echo "do something" ;;
        *) echo "do something else" ;;
    esac
done