【问题标题】:How to use a variable name in a Perl Regex bash script如何在 Perl Regex bash 脚本中使用变量名
【发布时间】:2013-06-09 22:14:41
【问题描述】:

我正在尝试编写一个 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_”)

【问题讨论】:

    标签: regex bash variables


    【解决方案1】:

    去掉单引号的替换:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2017-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-04
        • 2012-10-17
        • 1970-01-01
        • 1970-01-01
        • 2020-10-07
        相关资源
        最近更新 更多