Bashスクリプトを使用してディレクトリからファイルを検索する

Bashスクリプトを使用してディレクトリからファイルを検索する

現在の作業ディレクトリで、文字「f」を含むすべてのファイル名を取得するために、次のコードを書きました。

for i in *
do
  echo $i
  if [ $i = "*f*" ]
  then
    echo "no"
  else
    echo "yes"
  fi
done

ディレクトリ内のすべてのファイルに「f」が含まれているかどうかに関係なく、「yes」が印刷されます。助けてください。

ベストアンサー1

[ $i = "*f*" ]変数に保存されているファイル名をiスペースに基づいて別々の単語に分割し、各単語をワイルドカードパターンとして解釈し、一致する場合は展開し、結果の単語リストを次のように解析します[ … ]。この面倒な作業を避けるために、代わりにファイル名を使用してください。変数拡張の周囲に二重引用符を追加する

[ "$i" = "*f*" ]変数のファイル名がi3文字の名前であるかどうかをテストします*f*。この名前のファイルが存在しない場合は、すべてのファイルがelseブランチをトリガーしてyes印刷されます。

ksh、bash、またはzshでは、二重角括弧構成を使用して、文字列がワイルドカードパターンと一致するかどうかをテストできます。パターンのワイルドカード文字を引用符なしで残します。

if [[ "$i" = *f* ]]; then …

通常のshには二重括弧構文はありません。文字列がパターンと一致するかどうかをテストするには、caseコンストラクタを使用できます。

case "$i" in
  *f*) echo "no";;
  *) echo "yes";;
esac

おすすめ記事