作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
考虑到大小写,我正在尝试替换文件名的扩展名,但没有成功。
#!/bin/bash
pdf_file="/root/users/test.pdf"
jpg_file="${pdf_file/.pdf/.jpg}"
echo $jpg_file
我试过了,还是不行:
jpg_file="${pdf_file/(.pdf|.PDF)/.jpg}"
最佳答案
您可以使用这样的 glob 模式:
$ 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
备注对所有三种解决方案均有效:${<em>parameter</em>/<em>pattern</em>/<em>string</em>}
替换模式出现的任何地方,但扩展可能在最后 - 我们可以确保我们只会在最后替换它:
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"
关于linux - 参数替换替换为交替 (OR) |,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57795138/
我是一名优秀的程序员,十分优秀!