从bash中的一个函数捕获字符串返回值到另一个函数

时间:2016-04-18 10:30:59

标签: bash

我正在尝试从一个函数发送一个字符串作为返回值,该函数由另一个函数在另一个文件中调用。一方来源另一方。

代码是这样的:

#####################################################  
##filename: conf_abc.menu
#######################################################
#!/bin/bash
source <path>/conf_pqr.menu

function abc () {
    var=$(call_pqr)
    echo ${var}
}
##Calling function abc
abc

#########################################################
##filename: conf_pqr.menu
########################################################
#!/bin/bash

RET_VAL=""
function get_intf() {
   cmd=`some command`
   RET_VAL=${cmd}
}

function call_pqr () {
   comm=$(array of choices)
   for choice in $comm
   do
      case $choice in
      IF)get_intf;
         echo "$RET_VAL";;
      esac
   done
}

我希望在&#34; var&#34;中看到数组的选择。功能abc()。
但是&#34; echo $ {var}&#34;在conf_abc.menu中不会打印任何内容。

我通过执行以下操作来运行脚本: ./conf_abc.menu

我做错了什么?

1 个答案:

答案 0 :(得分:0)

感谢您的评论。我发现当从函数调用返回时,echo的整个输出被捕获到返回变量中。然后我使用“&gt;&amp; 2”过滤输出。我发现我确实得到了正确的返回字符串。 我从以下发现: stackoverflow.com/questions/11758368/shell-script-function-return-a-string

我在这里放了一个最小的例子:

##**file: vlan_menu.sh**
#!/bin/bash
source <path>/ifs_menu.sh

function conf_vlan () {
    echo "Calling function if_menu" >&2
    local output1=$(if_menu);
    echo "printing result" >&2
    ENET1="${output1}"
    echo "ENET1 is= "${ENET1}"" >&2
}
conf_vlan; --> calling the main function

##**file: ifs_menu.sh**
#!/bin/bash

RET_VAL=""

function get_if() {
    PI=$1
    local var1=$(shell command)
    if [ ! -z "${PI}" ]
    then
        local var2=<do something with var1>
    else
        local var2=<do something with var1>
    fi
    local cmd=$(start shell utility)
    RET_VAL=${cmd}
}

function if_menu() {
comm=(1 2 3 4 5)
for choice in ${comm}
do
    case $choice in
    1) echo "IF" >&2;
       get_if "";
       echo "${RET_VAL}";;

    2) echo "SF" >&2;
        get_if $1;
        echo "${RET_VAL}";;
    esac
done
}

运行“vlan_menu.sh”脚本文件后,“ENET1”的值与我想看到的“RET_VAL”相同。

-rsmitha。