\ 1は$ 1警告として書く方が良いですが、$ 1は機能しません。

\ 1は$ 1警告として書く方が良いですが、$ 1は機能しません。

「テキスト名[1].m4a」などの内容を含むファイルの名前を「テキスト名[01].m4a」に変更したいと思います。

最初は、次のように書きました。

rename -n "s/\[(\d)\]/\[0$1\]/" *.m4a

コマンドが[0]showに変わります。に[01]変更すると、期待どおりに動作します。$1\1

rename -n "s/\[(\d)\]/\[0\1\]/" *.m4a

\1 better written as $1 at (eval 5) line 1. しかし、最初のコマンドが機能しないのはなぜですか、そしてどのように書き換えることができますか?という警告があります。

File::Rename version 0.20と一緒に使用していますUbuntu 18.04.4 LTS

ベストアンサー1

"...$1..."二重引用符を使用すると、シェルは$1値に置き換えられます。それ文字列を渡す前に空の(シェルの)変数ですrename。したがって、交換のみrenameを見て[0]それに応じて実行できます。

シェルが$1文字通り渡すようにするには、二重引用符の代わりにrename単一引用符を使用します(Freddyが述べたように、代替文字列から角括弧をエスケープする必要はありません)。

おすすめ記事