You need to enable JavaScript to run this app. 如何通过嵌入式parameter substitution将文件名转日期操作改写为单条语句供exiftool调用
优惠活动
大模型
产品
解决方案
定价
更多

如何通过嵌入式parameter substitution将文件名转日期操作改写为单条语句供exiftool调用

解答

你尝试的嵌套参数扩展写法dt="${var:0:11} ${${var:11:8}//-/:}"不可行。POSIX Shell及所有主流Bash版本均不支持参数扩展嵌套,字符串替换操作的操作对象必须是已定义的变量名,不能是另一个参数扩展的返回结果。
另外注意你示例代码中使用的是中文全角双引号“,实际运行时需要替换为英文半角双引号",否则会触发语法错误。

可行的单条实现方案

纯Bash内置方案(无外部依赖,兼容Bash 3.2及以上版本)

[[ $var =~ ^(.{11})(.{8}) ]] && dt="${BASH_REMATCH[1]}${BASH_REMATCH[2]//-/:}"

通过正则匹配一次性捕获前11位的日期段、后续8位的时间段,直接对捕获到的时间段做横杠转冒号处理后拼接,全程无外部命令调用,执行效率更高。

外部命令方案(写法简洁,适合exiftool调用场景)

dt="$(sed -E 's/^(.{11})([0-9]{2})-([0-9]{2})-([0-9]{2}).*/\1\2:\3:\4/' <<<"$var")"

通过sed直接匹配文件名的固定结构,一步完成内容截取和字符替换,语法兼容性更强,无需考虑Shell版本差异。


内容的提问来源于stack exchange,提问作者Guasqueño

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 05:06:05