参数替换替换为交替(OR)

开发人员程序员

考虑到大小写,我试图替换文件名的扩展名,但没有成功。

#!/bin/bash
pdf_file="/root/users/test.pdf"
jpg_file="${pdf_file/.pdf/.jpg}"
echo $jpg_file

我试过了,但是不起作用:

jpg_file="${pdf_file/(.pdf|.PDF)/.jpg}"
本杰明W.

您可以使用这样的全局模式:

$ echo "${pdf_file/.[Pp][Dd][Ff]/.jpg}"
/root/users/test.jpg

如果您使用扩展的glob模式(shopt -s extglob),则可以改用以下形式:

$ echo "${pdf_file/.@(PDF|pdf)/.jpg}"
/root/users/test.jpg

或者,您可以使用shell选项在匹配时忽略大小写:

$ shopt -s nocasematch
$ pdf_file="/root/users/test.PDF"
$ echo "${pdf_file/.pdf/.jpg}"
/root/users/test.jpg

备注对所有三种解决方案均有效:替换模式,无论它发生在哪里,但扩展名都可能在结尾处–我们可以确保仅在结尾处替换它:${parameter/pattern/string}

echo "${pdf_file%.[Pp][Dd][Ff]}.jpg"

在任何POSIX Shell中都可以使用,或者

shopt -s extglob
echo "${pdf_file%.@(PDF|pdf)}.jpg"

要么

shopt -s nocasematch
pdf_file="/root/users/test.PDF"
echo "${pdf_file%.pdf}.jpg"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章