有没有办法让解释器知道第二条路径与终端中的第一条路径相同?

有没有办法让解释器知道第二条路径与终端中的第一条路径相同?

标题可能有点让人困惑,下面是一个例子

例如我在根

mv /usr/share/sounds/freedesktop/stereo/camera-shutter.oga \
  /usr/share/sounds/freedesktop/stereo/camera-shutter.temp

在此单个命令中,路径是相同的,只有文件名发生变化。这可能看起来真的微不足道,但我编写了很多类似的命令,我总觉得编写它们浪费了很多时间。我使用 zsh,它有路径完成功能,但仍然太繁琐,我也知道如何在终端中复制/粘贴,但我不喜欢使用鼠标。我知道!$修饰符,但它用于命令间,不适用于内联。从技术上讲,我希望我可以输入命令、路径,然后也许可以使用快捷方式来重复上一个目录路径,或者更好的是,!$如果存在修饰符的话。如果本机不存在这样的功能,您将如何做到这一点?有什么想法或技巧吗?越短越好。提前致谢

答案1

您可以使用 bash 和 zsh 中的当前行的历史记录扩展事件指示符 !#

例如,获取$当前行的最后一个参数!#并替换.temp.oga

mv /usr/share/sounds/freedesktop/stereo/camera-shutter.oga !#$:s/.oga/.temp

或者,在 bash、zsh 和其他支持括号扩展你可以简单地做

mv /usr/share/sounds/freedesktop/stereo/camera-shutter.{oga,temp}

请注意,括号扩展与 shell 通配符不同 - 它不关心结果是否与现有文件匹配。

相关内容