grim 文件名中出现意外的引号

grim 文件名中出现意外的引号

我不太明白为什么在使用 grim/slurp 时尝试生成屏幕截图文件名时会出现一些奇怪的行为。

如果我这样做:

grim -g "$(slurp)" "$HOME/screenshot-$(date).png"

我得到:

screenshot-Sat 27 Jun 2020 06:02:36 PM EDT

除了时间没有在我的文件夹中排序之外,这都可以。所以,我尝试了这个:

grim -g "$(slurp)" "$HOME/screenshot-$(date +\"%y%m%d_%T\").png"

但在那种情况下我得到这个:

screenshot-"200627_19:35:39.png"

有人可以解释为什么整个日期字符串周围出现引号(表达式中没有引号),以及如何消除它们?

答案1

$()创建一个新的引用上下文,因此您不需要转义其中的引号。这就是为什么$()首选 的原因之一``,其中混合嵌套和引号会导致一场噩梦。

用于比较:

$ echo "screenshot-$(date +\"%y%m%d_%T\").png"
screenshot-"200701_14:56:19".png
$ echo "screenshot-`date +\"%y%m%d_%T\"`.png"
screenshot-200701_14:56:27.png

您可以省略反斜杠并仅使用"screenshot-$(date +"%y%m%d_%T").png".或者,由于%其他的并不特殊,只需将内部引号完全省略即可:

$ echo "screenshot-$(date +%y%m%d_%T).png"
screenshot-200701_14:57:23.png

答案2

只需删除反斜杠即可。不是这个:

grim -g "$(slurp)" "$HOME/screenshot-$(date +\"%y%m%d_%T\").png"

但是这个:

grim -g "$(slurp)" "$HOME/screenshot-$(date +"%y%m%d_%T").png"

但关于你的评论:我的文件夹中的时间没有排序

我建议您使用:FullYear - Moth - Day 或%Y%m%d_%T或只是%F_%T

使用这种格式,文本排序可以很好地处理日期。

相关内容