首页 > 解决方案 > 如何在环境变量中捕获 bash 命令组(大括号)的输出

问题描述

例如,我可以使用 subshel​​l 执行此操作:

VAL=$( do_something )

但是我如何用花括号来实现同样的事情,这样命令就不会在子shell中执行?即这不起作用:

VAL={ do_something; }

TIA。

标签: bashsubshell

解决方案


我不确定我是否理解您要完成的工作的原因,但是如果您能详细说明一下,我可能会为您提供帮助。

我确实建议您阅读这篇关于实际情况的精彩文章,以及为什么我认为您不想在没有子 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.
  • commandcd用于调用真正的cd实现而不是递归。

推荐阅读