我正在尝试从一个函数发送一个字符串作为返回值,该函数由另一个函数在另一个文件中调用。一方来源另一方。
代码是这样的:
#####################################################
##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
我做错了什么?
答案 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。