繁体   English   中英

Bash 从命令末尾传递的替换

[英]Bash substitution passed from end of command

更多的是对是否以及如何完成它的好奇心。 有时我发现自己在重复命令时修改了同一命令的一小部分。

例子:

grep aaa file.txt
grep bbb file.txt
grep ccc file.txt

我知道我可以用 for 循环来设置它,但我并不总是知道开始时可能需要更改/测试的所有值。 我也可以使用键盘移动来更快地回到 aaa,但它仍然是额外的键。 这个例子不是很多,但是一些串在一起的命令会导致需要大量的键盘移动。

例如,我知道变量和文件可以在最后传递给某些命令。

while read i; do echo "$i"; done < ./file.txt

x='./file.txt'
sed 's/find/replace/' <<<${x}

我很好奇是否有一种方法可以用 bash 替换在命令末尾为未声明的变量做类似的声明。 我尝试了像grep ${} file.txt <<< 'aaa'这样的变体,但到目前为止我玩过的任何东西都没有解决。 我的目标是传递的值未声明为变量,因此我只需点击键盘上的向上箭头并在命令语句末尾编辑字符串。 感谢您提供的任何帮助或见解!

您可以快速定义 function:

f () { grep "$1" file.txt; }

现在你可以跑了

f aaa
f bbb
f ccc

f可能比任何可以调出上一个命令进行编辑的键序列都短:)另外,您要更改的部分现在是最后一个参数,如果您确实使用向上箭头调出最后一个参数,则编辑起来会更简单命令。

Bash 还支持通过^old^new^替换最后一个命令:

$ grep shy lyrics.txt
You're too shy to say it
You're too shy to say it
$ ^shy^cry^
grep cry lyrics.txt
Never gonna make you cry
Never gonna make you cry
...

感谢大家的反馈。 我也找到了另一个解决方案。

xargs -I {} grep {} file.txt <<< aaa

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM