Проблема с переименованием псевдонима Ubuntu

В моей системе установлена ​​Ubuntu 14.04 Trusty Tahr.

Я создал следующий псевдоним в моем файле ~/.bashrc, чтобы рекурсивно переименовывать каталоги в текущей папке, как простую в использовании короткую команду.

renamedirs() {
    find . -depth -type d -not -name '.' -exec rename 's/$1/$2/' {} +
}
alias rendirs=renamedirs

я уже сделал source ~/.bashrc вещь.

Но когда я запускаю этот псевдоним ниже,

rendirs Olddir Newdir

Я получаю следующую ошибку:

Use of uninitialized value $1 in regexp compilation at (eval 33) line 1.
Use of uninitialized value $2 in substitution iterator at (eval 33) line 1.
Use of uninitialized value $1 in regexp compilation at (eval 34) line 1.
Use of uninitialized value $2 in substitution iterator at (eval 34) line 1.
...
...

Кто-нибудь может дать мне знать, что здесь не так.

1 ответ

Bash делает разницу между одинарными кавычками '...' и двойные кавычки "...",

Одиночные кавычки приводят к тому, что заключенный текст воспринимается буквально, а двойные кавычки допускают различные интерпретации строки, такие как расширение переменной.

Вы должны использовать двойные кавычки, если у вас есть $x- как переменные Bash в вашей строке, которые вы хотите расширить.

Кроме того, прямо назовите вашу функцию rendirs и не используйте псевдоним для добавления второго имени, если первое не будет использоваться.

rendirs() {
    find . -depth -type d -not -name '.' -exec rename "s/$1/$2/" {} +
}
Другие вопросы по тегам