ファイル名を変更するためのシェルパラメータ置換

ファイル名を変更するためのシェルパラメータ置換

「foo」で始まるファイル名を「boo」に変更する必要があります

これは私が使用したスクリプトです

#!/bin/sh


for f in *.jpg;
do

mv -- "{$f}" "${f/foo/boo}";


done

しかし、実行すると不正な置換エラーが発生します。コードの問題は何でしょうか?

答え1

/bin/shをシェルとして使用していますが、これは単純な sh 機能のみを受け入れるようです。 のような高度な機能は${//}、bash などのシェルでのみ利用可能な拡張機能です。

シェバンを変更するだけで、すべてが機能するはずです。

man renameまた、 ( util-linux のprenamewhere is と呼ばれることもあります)も参照してくださいrename。これで必要な操作が正確に実行されるはずです。

rename 's/^foo/boo/' foo*.jpg

意図的に使用する場合は、以下/bin/shを使用できます。

mv -- "$f" "boo${f#foo}"

詳細については man sh を参照してください。

関連情報