Shell Scripting:具有多行参数的函数作为另一个函数的参数

时间:2014-05-07 05:12:29

标签: bash shell

我有一个函数,它将另一个函数作为参数并执行一些操作。 e.g。

processFunc()
{
    Func=$1
    ...
}

现在问题是当我传递一个也接受多行变量作为参数的函数时。 e.g。

VAL="1\n2\n3\n4"
Func1()
{
    VAL=$1
    ...
}

现在,当我调用直接函数Func1()时没有问题 例如

VAL2=`Func1 "$VAL"`

但是当我尝试拨打proccessFunc()时会出现问题 e.g。

VAL3=`processFunc 'Func1 "$VAL"'`   #Here is the problem...

需要帮助解决上述问题。

测试代码

#! /bin/bash
#set -x
func1()
{
    VAL1="$1"
    echo "$VAL1" ok
    for i in $VAL1
    do
        echo $i
        sleep 1
    done
}

func2()
{
    VALFUN="$1"
    TIME=$2
    COUNTER=1
    while [ $COUNTER -le $TIME ]
    do
         # clear
         $VALFUN
         sleep 2
         COUNTER=`expr $COUNTER + 1`
    done
}

func3()
{
    echo a
    echo b
    echo c
}

#### Main #####
LOCALVAL="`echo -e "123\nabc\nxyz"`"
#echo "$LOCALVAL"
echo "func1"
func1 "$LOCALVAL"
echo "func2 with func3"
func2 "func3" 3
echo "func2 wth func1"
func2 "func1 "$LOCALVAL"" 3

我得到的错误是:

./test.sh: line 18: [: abc: integer expression expected

2 个答案:

答案 0 :(得分:1)

如果您使用Func1的输出并将其用于processFunc

,那会不会很好

所以你的代码是:

VAL="1\n2\n3\n4"
VAL2=Func1 "$VAL"

Func1将在哪里:

Func1()
{
 VAL=$1
 ...
}

然后将processFunc称为

VAL3=processFunc "$VAL"

希望这会有所帮助。

或者我认为你传递一个字符串值,你的shell期待一个字符串。 我相信代码应该是:

a=123\nabc\nxyz
LOCALVAL = echo $a

答案 1 :(得分:0)

你可以这样做

VAL3="processFunc Func1 $VAL"
$VAL3