【发布时间】:2023-03-25 12:14:01
【问题描述】:
我有一个函数,它接受另一个函数作为参数并执行一些操作。 例如
processFunc()
{
Func=$1
...
}
现在的问题是当我传递一个也接受多行变量作为参数的函数时。 例如
VAL="1\n2\n3\n4"
Func1()
{
VAL=$1
...
}
现在,当我调用直接函数Func1() 时没有问题了
例如
VAL2=`Func1 "$VAL"`
但是当我尝试拨打proccessFunc() 时出现问题
例如
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
【问题讨论】:
-
您能说明您面临的错误/问题吗?
-
我已将您的代码编辑到您的问题中——我看到您尝试过。请检查现在是否正常。在为 SO 准备代码时,用空格(不是制表符)缩进它,通常每个缩进级别 4 个空格(但这取决于你)。将代码复制并粘贴到编辑框中,选择它并使用编辑框上方的
{}按钮将其缩进为代码。这基本上就是我为你所做的。小心 shell 中的反引号。他们对 SO Markdown 感到困惑。另外,一般来说,使用$(…)而不是command substitution 的反引号。 -
这里的“abc”是什么??
-
abc 是变量 LOCALVAL 中的第二行 ------ 代码正在尝试评估变量
-
那么你想做什么......如果我的脚本没有错,你想将 func1 作为参数传递给 func2 并从其他一些 func 调用 func2?