シェルスクリプトで文字列をワイルドカード文字列と比較するには?

シェルスクリプトで文字列をワイルドカード文字列と比較するには?

kshシェルスクリプトでファイル名文字列とファイルマスクを比較したいです。文法を修正できますか?

if [ "NPER20200422TEST.PTN" = "NPER*.PTN" ]
then
    echo "File matched"
else
    echo "File not matched"
fi

私のファイル文字列を与えられたファイルマスクと一致させたいです。

答え1

使用していることを確認してください。またはまたは、その後

if [[ "NPER20200422TEST.PTN" == NPER*.PTN ]]

二重角かっこ条件を使用し、特殊なワイルドカードメタ文字は引用符を解除する必要があります。

答え2

Bourneに似たシェルであるincludeでは、kshこの設定は次の目的caseに使用されます。

case NPER20200422TEST.PTN in
  (NPER*.PTN) echo "File matched";;
  (*) echo "File not matched";;
esac

Bourneシェル(多くの人が混乱し続けているが今日は廃止されている歴史的なシェル)では、sをsh省略する必要があります。(の標準(POSIX)実装では、orの使用が許可されます(*)*)sh

答え3

anを使用して明細書を印刷し、echo次にパイプすることができますgrep

if echo NPER20200422TEST.PTN | grep -q "NPER.*PTN"
then
  echo "File matched"
else
  echo "File not matched"
fi

grep -q出力を生成しません

関連情報