$(<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
请注意,我添加了-s
以curl
避免stderr
与命令行混淆。对于其他命令,您可能需要使用2> /dev/null
.
答案2
我在非 Apple 笔记本电脑上使用 Kubuntu 中的 Bash。Ctrl+ Alt+e扩展了命令行中的许多内容,包括$(whatever)
.我不确定击键如何“转换”到 Mac 键盘。重点是要触发shell-expand-line
命令。
笔记:
- 错误
whatever
可能会中断您的流程 - 其他东西也将被内联扩展
- 引用将会丢失
因此我认为最好$(whatever)
先输入,展开它,然后再添加其余的。