3

Bourne シェル スクリプト用に Unix でファイルまたはディレクトリ名に拡張子が含まれているかどうかを確認する必要があります。

ロジックは次のようになります。

  1. ファイル拡張子がある場合
  2. 拡張機能を削除します
  3. 拡張子なしのファイル名を使用します

これは私の最初の質問なので、誰かから聞いてうれしいです.

4

2 に答える 2

4

拡張子の概念は、従来のおもちゃの DOS 8+3 ファイル名ほど厳密に明確に定義されていません。ドットが最初の文字ではないドットを含むファイル名を見つけたい場合は、これを試してください。

case $filename in
    [!.]*.*) filename=${filename%.*};;
esac

これにより、拡張子が 1 つある場合は (上記の定義に従って、最後のドットが複数ある場合は最後のドットから開始して) 拡張子が削除され$filename、そうでない場合は何も削除されません。

名前がドットで始まる可能性のあるファイルを処理しない場合は、ドットcaseがないと割り当ても値に触れないため、不要です。ただし、このベルトとサスペンダーの例では、何らかの方法で拡張する必要がある場合に備えて、好みのアプローチを簡単に選択できます。

ドットが最初の文字でない限り (ただし、最初の文字もドットであっても問題ありません)、ドットがあるファイルも処理するには、 pattern を試してください?*.*

case in パターン ) コマンド;; esac構文は奇妙で恐ろしく見えるかもしれませんが、非常に用途が広く、学ぶ価値があります。

于 2012-05-27T12:08:07.953 に答える
0

シェルに依存しないソリューションを使用します。名前を実行する:

cut -d . -f 1

最初のドットまでのすべてを表示します ('-d .' は区切り記号を設定し、'-f 1' は最初のフィールドを選択します)。パラメータをいじって(選択を逆にするために「--補完」を試してください)、欲しいものはほとんど何でも手に入れることができます。

于 2012-05-27T12:16:16.843 に答える