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

时间:2013-06-05 14:13:39

标签: bash awk grep

我是shell编程的新手,我正在尝试编写一个shell脚本,将grep或awk模式过滤输出分配给bash shell中的命令行参数。

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

我想做,但它不会让我这样做。

这甚至可能吗?

4 个答案:

答案 0 :(得分:0)

在bash中,您无法以调用者可以读取该值的方式设置位置参数。如果要从函数中“返回”一个字符串,则必须将其写入stdout,如下所示:

function myfunc()
{
    echo "test"
}

VAR=$(myfunc)

运行上述代码时,VAR将包含字符串'test'。

答案 1 :(得分:0)

有关参考问题,请查看man页面;例如,man bashman grep等。对于像function这样的内部shell命令,内置bash具有类似功能的help,例如help function,例如set 1}}。

要设置位置参数,您可以使用内置set -- "a b" "c d"。例如,$1a b设置为$2,将c d设置为bash

有关{{1}}编程的实用介绍,请参阅Bash wiki。它只是那里最好的Bash资源。

答案 2 :(得分:0)

您无法分配位置参数,但您可以执行以下操作:

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

因此,在这种情况下,您可以通过使用变量(myfFOO)将这些命令的内容传递给函数BAR。 您甚至可以在没有调用myf $(some command)的虚拟变量的情况下执行此操作,但我编写它的方式可以提高可读性。

答案 3 :(得分:0)

在尝试使用功能之前,请先尝试使用脚本。

#!/bin/sh
arg1=${1?'Missing argument'}
grep -ai "some string"  $arg1

然后将此脚本放在〜/ bin文件夹中(确保已更改PATH目录以包含〜/ bin

然后只需执行脚本。 如果你真的需要一个功能,那么就做

#!/bin/sh
b() {
    grep -ai "some string" $1
}

b filename