将awk或grep输出放入bash中的命令行参数
我对shell编程非常陌生,我正在尝试编写一个shell脚本,将grep或awk模式过滤输出分配给bashshell中的命令行参数将awk或grep输出放入bash中的命令行参数,bash,awk,grep,Bash,Awk,Grep,我对shell编程非常陌生,我正在尝试编写一个shell脚本,将grep或awk模式过滤输出分配给bashshell中的命令行参数 a.sh source ./b.sh called a function like // a(function name) parameter1 parameter2 b.sh function a{ $2=grep -ai "some string" a.txt(parameter 1) echo "$2"
a.sh
source ./b.sh
called a function like // a(function name) parameter1 parameter2
b.sh
function a{
$2=grep -ai "some string" a.txt(parameter 1)
echo "$2"
}
我想做喜欢的事,但它不让我去做
这可能吗?在bash中,不能以调用方可以读取该值的方式设置位置参数。如果要从函数“返回”字符串,必须将其写入标准输出,如下所示:
function myfunc()
{
echo "test"
}
VAR=$(myfunc)
运行上述代码时,
VAR
将包含字符串“test”。有关参考问题,请查看man
页面;例如,manbash
,mangrep
等。对于像function
这样的内部shell命令,有一个bash
内置的类似功能,称为help
,例如help function
要设置位置参数,可以使用内置的set
。例如,set--“ab”“cd”
将$1
设置为ab
并将$2
设置为cd
有关
bash
编程的实用介绍,请参阅。它只是最好的Bash资源。您不能指定位置参数,但可以执行以下操作:
function myf {
#do something with $1,$2, etc
}
FOO=$(awk command)
BAR=$(other command)
myf $FOO $BAR #the function will use $FOO and $BAR as $1 and $2 positional parameters
因此,在这种情况下,您可以通过使用变量(FOO
和BAR
)将这些命令的内容传递给函数myf
。
您甚至可以在不调用伪变量的情况下调用
myf$(某些命令)
,但我编写它的方式提高了可读性。在尝试函数之前,请先尝试脚本
#!/bin/sh
arg1=${1?'Missing argument'}
grep -ai "some string" $arg1
然后将此脚本放在~/bin文件夹中(确保已将路径目录更改为包含~/bin)
然后执行脚本。
如果你真的需要一个函数,那就去做吧
#!/bin/sh
b() {
grep -ai "some string" $1
}
b filename
阅读有关命令替换的手册页部分。如果没有提供参数,我的示例会给出一个错误,但这可能不是您想要的。脚本可以是简化的
grep-ai“some string”$1
——这允许您在没有参数的情况下使用它,例如cat file*.txt | script