我有一个函数,它将另一个函数作为参数并执行一些操作。 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
答案 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