TL:DR 如何将 grep 添加到 bash 函数,同时允许可变数量的可选输入?
我发现在重复 grep 大输出时,我最终会用数据堵塞终端。有时,我想做一个 grep,并在捕获所有数据的同时快速转到它的顶部。为此,我已经习惯使用“clear;clear; grep [options] [string] [file] ; top”。由于懒惰,我想将其变成一个名为“cgrep”的函数,该函数执行两个清除和 grep。我尝试过的是:
cgrep () {
clear
clear
grep "$1" "$2" "$3"
}
这是可行的,前提是我始终只使用一个可选参数。虽然这在大多数情况下都不是问题,但我很好奇如何向其提供 0-N 个可选参数而不引起问题(例如将 [string] 读取为 [file])。
我读了这个帖子,并尝试了类似的实现。但是,这不太适合我的需求,如果我可以在 cgrep 和 [string] 之间添加可选参数,使其看起来更像传统的 grep ,那就更好了。
答案1
在 bash 和 sh 中"$@"
,将展开所有位置参数,如下所示:
cgrep () {
clear
clear
grep "$@"
}
请注意,$@
必须用双引号引起来,以防止对每个参数执行分词、通配符、空删除等操作。