将awk或grep输出放入bash中的命令行参数

将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"

我对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"
     }
我想做喜欢的事,但它不让我去做


这可能吗?

在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