标题可能有点让人困惑,下面是一个例子
例如我在根
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 通配符不同 - 它不关心结果是否与现有文件匹配。