如何在 Bash 中扩展和编辑命令替换的结果?

如何在 Bash 中扩展和编辑命令替换的结果?

$(<cmd>)是否可以在 Bash 中扩展和编辑命令替换的结果?

假设这<cmd>导致我想要执行另一个命令。事实上,$(<cmd>)将执行该命令,但它在 中不可见history,因此我无法返回并编辑它。

我解决这个问题的唯一方法是将 的输出分配$(<cmd>)给变量cmd=$(<cmd>),然后pbcopy在 macOS 上使用:将其回显到剪贴板中echo $cmd | pbcopy

答案1

您可以展开当前命令行中的所有 shell 替换。

外壳扩展线 (MCe)- 像 shell 一样扩展该行。这将执行别名和历史扩展以及所有 shell 单词扩展(参见 Shell 扩展)。

按:Ctrl+ Esc+ e

例子:

$ echo $(curl -s ifconfig.io)
# press ctrl+esc+e,
# command line will switch to:
$ echo 151.101.1.69

请注意,我添加了-scurl避免stderr与命令行混淆。对于其他命令,您可能需要使用2> /dev/null.

答案2

我在非 Apple 笔记本电脑上使用 Kubuntu 中的 Bash。Ctrl+ Alt+e扩展了命令行中的许多内容,包括$(whatever).我不确定击键如何“转换”到 Mac 键盘。重点是要触发shell-expand-line命令。

笔记:

  • 错误whatever可能会中断您的流程
  • 其他东西也将被内联扩展
  • 引用将会丢失

因此我认为最好$(whatever)先输入,展开它,然后再添加其余的。

相关内容