如何在Perl Regex bash脚本中使用变量名

时间:2013-06-09 22:14:42

标签: regex bash variables

我正在尝试编写一个bash shell脚本,将一堆照片重命名为我自己的编号系统。所有图像文件名都像“IMG_0000.JPG”,我可以使用以下Perl-regex代码来匹配和重命名(覆盖)所有照片的脚本:

#!/bin/bash
rename -f 's/\w{4}\d{4}.JPG/replacement.jpg/' *.JPG;

但是当我尝试使用变量作为替换的名称时,正如我在其他帖子和互联网上的其他帖子中看到的那样,没有任何反应:

#!/bin/bash
$replacement = "000.jpg";
rename -f 's/\w{4}\d{4}.JPG/$replacement/' *.JPG;

如何在我的bash脚本中使这样的变量正常工作? (注意:我不打算简单地从文件名中删除“IMG_”)

2 个答案:

答案 0 :(得分:1)

取代单引号:

#!/bin/bash
$replacement="000.jpg"
rename -f 's/\w{4}\d{4}.JPG/'$replacement'/' *.JPG

Bash不检查单引号字符串是否插值。

答案 1 :(得分:0)

使用双引号和正确的变量赋值:

#!/bin/bash
replacement="000.jpg"
rename -f "s/\w{4}\d{4}\.JPG/$replacement/" *.JPG

请注意,这会导致麻烦,例如:重命名名为IMG_0001.JPGFOO_9352.JPG的两个文件时:第一个文件将重命名为000.jpg,然后第二个文件也将重命名为000.jpg,覆盖第一个文件