Shell:文字列に指定された文字が含まれていることを確認する

Shell:文字列に指定された文字が含まれていることを確認する
#!/bin/sh

TMP=$(cd Folder && ls)

for name in $TMP; do

  if [[ "${name}" != *"a"* -a ${name} == *"b"* ]] ;then
   echo $name
  fi

done

「a」はないが「b」の名前を出力しようとしています。私が得るエラーは次のとおりです。

./aufg7.sh: 6: [[: not found
./aufg7.sh: 6: [[: not found
./aufg7.sh: 6: [[: not found
./aufg7.sh: 6: [[: not found
./aufg7.sh: 6: [[: not found
./aufg7.sh: 6: [[: not found

私がここで何を間違っているのか?

ベストアンサー1

印刷するには、Folder次のものが含まれていません。bazsh~とは別に/まさか)グローバル演算子:

#! /bin/zsh -
set -o extendedglob
print -rC1 -- Folder/(*b*~*a*)(N:t)

(削除してくださいNnullglob一致するファイルがない場合はエラーを報告するため)。

(標準構文の一部ではない) この演算子を導入するシェルksh93とその[[...]]sh&そして)と!(...)いいえ)オペレータ:

#! /bin/ksh93 -
(
  CDPATH= cd Folder &&
    set -- ~(N)@(*b*&!(*a*)) &&
    (($# > 0)) &&
    printf '%s\n' "$@"
)

kshの演算子も複製するbashシェルを使用してksh88 glob演算子のサポートを使用し、zshのglob修飾子またはglob演算子といくつかの二重否定(zsh[[...]]extglobnullglobNksh93~(N)|または)達成するそして:

#! /bin/bash -
(
  shopt -s extglob nullglob
  cd ./Folder &&
    set -- !(!(*b*)|*a*) &&
    (($# > 0)) &&
    printf '%s\n' "$@"
)

標準sh構文では:

#! /bin/sh -
(
  CDPATH= cd Folder || exit
  set -- [*]b[*] *b*
  [ "$1/$2" = '[*]b[*]/*b*' ] && exit # detect the case where the pattern
                                      # expands to itself because there's
                                      # no match as there's no nullglob
                                      # equivalent in sh
  shift
  for i do
    case $i in
      (*a*) ;;
      (*) set -- "$@" "$i"
    esac
    shift
  done
  [ "$#" -gt 0 ] && printf '%s\n' "$@"
)

cd読み取り権限はありますが、検索権限がないと使用されている解決策は機能しませんので注意してください。Folder

より一般的には、文字列に他の文字列が含まれているかどうかを確認する方法に関する一般的な質問に答えるには、パターンマッチングを実行する構文を使用することをお勧めしますsh。ヘルパー機能を使用することもできます。casesh

contains()
  case "$1" in
    (*"$2"*) true;;
    (*) false;;
  esac

次のように使用してください。

if contains foobar o; then
  echo foobar contains o
fi
if ! contains foobar z; then
  echo foobar does not contain o
fi
if
  contains "$file" b &&
    ! contains "$file" a
then
  printf '%s\n' "$file contains b and not a "
fi

おすすめ記事