【问题标题】:Shell Scripting: Function with multi-line argument as an argument to another functionShell 脚本:具有多行参数的函数作为另一个函数的参数
【发布时间】: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?

标签: bash shell


【解决方案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

【讨论】:

    【解决方案2】:

    你可以这样做

    VAL3="processFunc Func1 $VAL"
    $VAL3
    

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 2022-01-11
      • 1970-01-01
      • 2011-08-12
      • 2018-11-13
      • 1970-01-01
      • 2016-07-21
      • 1970-01-01
      相关资源
      最近更新 更多