考虑到大小写,我试图替换文件名的扩展名,但没有成功。
#!/bin/bash
pdf_file="/root/users/test.pdf"
jpg_file="${pdf_file/.pdf/.jpg}"
echo $jpg_file
我试过了,但是不起作用:
jpg_file="${pdf_file/(.pdf|.PDF)/.jpg}"
您可以使用这样的全局模式:
$ 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] 删除。
我来说两句