我希望能够在后续命令中使用上次执行的命令的结果。例如,
$ find . -name foo.txt
./home/user/some/directory/foo.txt
现在假设我希望能够在编辑器中打开该文件,或者删除它,或者对它执行其他操作,例如
mv <some-variable-that-contains-the-result> /some/new/location
我该怎么做呢?也许使用一些bash变量?
更新:
为了澄清,我不想手动分配东西。我想要的是类似内置bash变量的东西,例如
ls /tmp
cd $_
$_
保存前一个命令的最后一个参数。我想要一些类似的东西,但带有最后一个命令的输出。
最终更新:
Seth的回答效果很好。有几件事需要牢记:
touch /tmp/x
时才会存储结果
发布于 2011-05-11 03:49:07
我不知道有什么变量会自动实现这一点。除了复制粘贴结果之外,你还可以重新运行你刚刚做过的事情,例如
vim $(!!)
其中!!
是历史扩展,意思是“上一条命令”。
如果您希望单个文件名中包含空格或其他字符,这可能会阻止正确的参数解析,请引用结果(vim "$(!!)"
)。不加引号将允许一次打开多个文件,只要这些文件不包含空格或其他shell解析标记。
发布于 2011-05-11 03:49:25
有不止一种方法可以做到这一点。一种方法是使用v=$(command)
,它会将命令的输出分配给v
。例如:
v=$(date)
echo $v
你也可以使用反引号。
v=`date`
echo $v
当使用旧式的反引号形式的替换时,反斜杠保留其原义,除非后面跟"$“、"`”或"\“。前面没有反斜杠的第一个反引号将终止命令替换。当使用"$(COMMAND)“形式时,括号中的所有字符组成命令;没有任何字符被特殊处理。
编辑:在问题中的编辑之后,似乎这不是操作员要找的东西。据我所知,没有像$_
这样的特殊变量来表示上一条命令的输出。
发布于 2011-05-11 03:47:52
这相当简单。使用反引号:
var=`find . -name foo.txt`
然后你可以在将来的任何时候使用它
echo $var
mv $var /somewhere
https://stackoverflow.com/questions/5955577
复制相似问题