Во-первых, (.*)$
- это то, что известно как регулярное выражение (или регулярное выражение). Регулярные выражения используются для соответствуют текстам, основанным на некоторых правилах.
Например, .*
соответствует нулю или нескольким символам. $
соответствует концу строки. Поскольку регулярные выражения по умолчанию являются жадными, .*$
соответствует всей строке (хотя, именно потому, что регулярные выражения жадные, $
является излишним).
Однако, я хотел бы спросить, почему требуется здесь открывать и закрывать скобки: (.*)
Круглые скобки обозначают группу. Группы используются для «сохранения» содержимого совпадающего текста, чтобы вы могли его использовать позже.
А также почему $1
переменная, которая хранит имя исходного файла, почему я не могу сделать то же самое со следующим (где я заменил $1
с $2
): ...
В случае rename(1)
первая группа хранится в $1
, вторая группа хранится в $2
и так далее. Например, следующее регулярное выражение:
(a)(b)(c)
хранит один a
в $1
, один b
в $2
и так далее.
Там у вас есть только одна группа, поэтому вы должны использовать $1
. Токены, такие как $2
, $3
, ... будут пустыми.
Последнее, но не менее, вы могли бы использовать более короткую, эквивалентную команду:
rename 's/^/new./'
Здесь ^
обозначает начало строки.
Это не имеет никакого отношения к BASH. Это основной синтаксис регулярных выражений. Прочтите основное учебное пособие по регулярному выражению. – anubhava
Почему вы ожидаете, что вы можете просто случайно заменить одно расширение переменной другим? –