我的系统中安装了 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/" {} +
}