首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Bash自动将最后一条命令的输出捕获到变量中?

使用Bash自动将最后一条命令的输出捕获到变量中?
EN

Stack Overflow用户
提问于 2011-05-11 03:44:25
回答 20查看 120.5K关注 0票数 142

我希望能够在后续命令中使用上次执行的命令的结果。例如,

代码语言:javascript
复制
$ find . -name foo.txt
./home/user/some/directory/foo.txt

现在假设我希望能够在编辑器中打开该文件,或者删除它,或者对它执行其他操作,例如

代码语言:javascript
复制
mv <some-variable-that-contains-the-result> /some/new/location

我该怎么做呢?也许使用一些bash变量?

更新:

为了澄清,我不想手动分配东西。我想要的是类似内置bash变量的东西,例如

代码语言:javascript
复制
ls /tmp
cd $_

$_保存前一个命令的最后一个参数。我想要一些类似的东西,但带有最后一个命令的输出。

最终更新:

Seth的回答效果很好。有几件事需要牢记:

  • 在第一次尝试解决方案时不要忘记touch /tmp/x
  • 只有在最后一个命令的退出代码成功

时才会存储结果

EN

回答 20

Stack Overflow用户

发布于 2011-05-11 03:49:07

我不知道有什么变量会自动实现这一点。除了复制粘贴结果之外,你还可以重新运行你刚刚做过的事情,例如

代码语言:javascript
复制
vim $(!!)

其中!!是历史扩展,意思是“上一条命令”。

如果您希望单个文件名中包含空格或其他字符,这可能会阻止正确的参数解析,请引用结果(vim "$(!!)")。不加引号将允许一次打开多个文件,只要这些文件不包含空格或其他shell解析标记。

票数 92
EN

Stack Overflow用户

发布于 2011-05-11 03:49:25

有不止一种方法可以做到这一点。一种方法是使用v=$(command),它会将命令的输出分配给v。例如:

代码语言:javascript
复制
v=$(date)
echo $v

你也可以使用反引号。

代码语言:javascript
复制
v=`date`
echo $v

来自Bash Beginners Guide

当使用旧式的反引号形式的替换时,反斜杠保留其原义,除非后面跟"$“、"`”或"\“。前面没有反斜杠的第一个反引号将终止命令替换。当使用"$(COMMAND)“形式时,括号中的所有字符组成命令;没有任何字符被特殊处理。

编辑:在问题中的编辑之后,似乎这不是操作员要找的东西。据我所知,没有像$_这样的特殊变量来表示上一条命令的输出。

票数 13
EN

Stack Overflow用户

发布于 2011-05-11 03:47:52

这相当简单。使用反引号:

代码语言:javascript
复制
var=`find . -name foo.txt`

然后你可以在将来的任何时候使用它

代码语言:javascript
复制
echo $var
mv $var /somewhere
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5955577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档