拡張シェル変数を削除するために使用されるパーセント記号

拡張シェル変数を削除するために使用されるパーセント記号
for file in *.pdf ; do
    newname=${file%\\.\*}
done

%\.*ファイル拡張子を削除する方法がわかりません。誰かが方法を導くことができますか?

答え1

%\.*ファイル拡張子を削除する方法がわかりません。

そうではないからです。 :) 書かれたコードが間違っているので、便利な機能を実行できません。

${variable%pattern}許可$variableおよび削除する標準シェル拡張があります。最短最後に一致するブロックがありますpattern(同様の拡張子があり、${variable%%pattern}削除されました)。最長マッチ)。しかし、patternこれはシェルグローブでなければならず、上記のコード作成者はこれを正規表現として意図したようです。

正しい形式は次のとおりです。${file%.*}.右側のすべての項目を削除すると機能します。一番右指す。代わりに、${file%%.*}右側のすべてのアイテムを削除してください。一番左指す。たとえば、ifはfile=/some/very.long.directory.name/foo.pdf${file%.*}展開され、/some/very.long.directory.name/foo拡張${file%%.*}されます/some/very

関連情報