如何从 bash 中的前一个命令中获取特定参数?

如何从 bash 中的前一个命令中获取特定参数?

在 bash 中,您可以使用!*获取上一个命令的所有参数。例如,如果您先执行cp /some/path /some/other/path,然后执行mv !*,则第二个命令将扩展为mv /some/path /some/other/path

是否有类似的东西可以用来从命令访问特定参数而不是所有参数?

答案1

!*!历史扩展前缀,并且*字标识符表示所有参数。您可以将通用语法记住为 bang-line-colon-column ( !line:列)。有许多可能的快捷方式:默认行是上一行,默认列说明符是“全部”,如果列说明符是非数字的(但!3表示第 3 行),则可以省略冒号。您可以使用!:0来引用命令名称、!:1!:2等,引用连续的参数、!:$最后一个单词、!:*所有参数等等。

也可以看看这篇文章由 Michael Mrozek 撰写Unix Stack Exchange

答案2

就我个人而言,我真的不喜欢这个“带感叹号的扩展”功能,它甚至会在你尝试echo "Hello World!"在交互式 shell 时造成干扰(因此,假设它们将在非交互模式下运行的源脚本根本不起作用)。

因此,我set +o histexpand使用以下方法设置并开始回忆参数:

Esc, 1, Esc, Ctrl-Y => Insert first argument of previous command.

请注意,Esc-trick 是因为我没有元键。

相关内容