如何在 bash 中构造正确的命令字符串?我认为是引用问题

如何在 bash 中构造正确的命令字符串?我认为是引用问题

我有一个非常新手的问题,我确信。我正在尝试构建一个脚本来使用命令行 exiftool 实用程序编辑多个 JPG 照片文件的内部 EXIF 时间戳。我实际的问题在于构建命令字符串。

我需要脚本执行的命令如下所示:

exiftool -overwrite_original_in_place -DateTimeOriginal="2015:12:29 08:00:00" filename.jpg

我的脚本的相关部分是:

# compute timestamp
TIMESTAMP="2015:12:29 `printf %02d $HOUR`:`printf %02d $MIN`:`printf %02d $SEC`"
# Set options string for exiftool
EXOPTION='-overwrite_original_in_place -DateTimeOriginal="'$TIMESTAMP'"'
# Execute exiftool on the current file
exiftool $EXOPTION $f

但是,那设置-x脚本中的选项显示正在执行的是

exiftool -overwrite_original_in_place '-DateTimeOriginal="2015:12:29' '08:00:00"' filename.jpg

额外的单引号字符被插入到日期时间原始选项,但我不明白为什么或如何。

在此先感谢您提供的任何帮助。

日本国债

答案1

您不必担心 set -x 显示的内容。它只是以自己的方式指示单词边界和空格的位置,但这并不是您调用命令时的内容。

不过,为了更清晰,你应该考虑将表达式写得更简单一些。例如:

TIMESTAMP=`printf '2015:12:29 %02d:%02d:%02d' $HOUR $MIN $SEC`
EXOPTION="-overwrite_original_in_place -DateTimeOriginal=\"$TIMESTAMP\""

相关内容