bash - 如何在环境变量中捕获 bash 命令组(大括号)的输出
问题描述
例如,我可以使用 subshell 执行此操作:
VAL=$( do_something )
但是我如何用花括号来实现同样的事情,这样命令就不会在子shell中执行?即这不起作用:
VAL={ do_something; }
TIA。
解决方案
我不确定我是否理解您要完成的工作的原因,但是如果您能详细说明一下,我可能会为您提供帮助。
我确实建议您阅读这篇关于实际情况的精彩文章,以及为什么我认为您不想在没有子 shell 的情况下调用进程。
但是,要尝试回答您的问题:
您不能真正在 内部运行命令${}
,除非在未设置值的后备子句中(在 POSIX sh 或 bash 中;在 zsh 中可能是可行的,它允许各种奇怪的语法)。
但是,cd
如果你真的想要这样,你可以这样调用:
cdr() {
if (( $# )); then
command cd "$@"
else
local home
home=$(git rev-parse --show-toplevel 2>/dev/null) || home=$HOME
command cd "$home"
fi
}
笔记
- 使用函数可以让我们测试我们的参数列表,使用分支逻辑,有局部变量,
&c
. - command
cd
用于调用真正的cd
实现而不是递归。
推荐阅读
- javascript - Javascript 属性重击
- c# - 在 C# 控制台应用程序中获取鼠标光标位置
- airflow - 全天多个计划的气流计划单 dag
- c# - 找出应用程序使用了哪些表和列
- plsql - 有没有办法测量或监控调度程序作业使用的资源?
- c# - 使用 IQueryable.Where 方法返回所有模型属性,即使为 null 或为空
- google-cloud-platform - 为 config_prd 数据集授予 Airflow 帐户数据查看器权限
- r - 侧边栏面板中没有出现闪亮的小部件
- c++ - 获取未知值和答案
- r - 仅在某些带有 facet_wrap 的子图中释放 y 轴