Linux 不使用subshell-bash调用带有参数的函数
我对bash不太熟悉。我有一个场景,我调用一个带有几个参数的函数,并将返回值赋给一个变量 下面是一个示例代码:Linux 不使用subshell-bash调用带有参数的函数,linux,bash,Linux,Bash,我对bash不太熟悉。我有一个场景,我调用一个带有几个参数的函数,并将返回值赋给一个变量 下面是一个示例代码: function f1() { if [[ $1 =~ $IP_REGEX ]] then return 0 else echo 'Invalid IP' exit 1 end } function f2() { # read ip from json file using jq local config=<read config
function f1() {
if [[ $1 =~ $IP_REGEX ]]
then
return 0
else
echo 'Invalid IP'
exit 1
end
}
function f2() {
# read ip from json file using jq
local config=<read config>
# validate ip by calling f1 if second argument passed to f2 is 'ip'
[[ $2 == "ip" ]] && f1 $config
echo $config
}
function read_all_configs() {
pxe-ip=$(f2 'pxe-ip' 'ip')
}
函数f1(){
如果[[$1=~$IP\u REGEX]]
然后
返回0
其他的
回显“无效IP”
出口1
结束
}
函数f2(){
#使用jq从json文件读取ip
本地配置=
#如果传递给f2的第二个参数为“ip”,则通过调用f1验证ip
[$2==“ip”]&&f1$config
echo$config
}
函数读取所有配置(){
pxe ip=$(f2'pxe ip''ip')
}
问题是,当检测到错误的IP时,变量“pxe IP”被赋值为“Invalid IP”,因为正在从子shell调用f2,是否可以使用同一shell中的参数调用函数?可以将函数用作f2(IP_REGEX)作为一个我建议下一个解决方案:
#
# f(IP_to_check)
# return true | false
function f1(){
local IP_TO_CHECK="$1"
if [[ "$IP_TO_CHECK"=~ "$IP_REGEX" ]]
then
return 0
else
echo 'Invalid IP'
return 1
end
}
function f2() {
# read ip from json file using jq
# validate ip by calling f1 if second argument is 'ip'
# f1 <ip>
local MY_FIRST_PARM="$1"
local MY_SECOND_PARAM="$2"
if [ "$MY_SECOND_PARAM" == "ip" ]; then
# do whatever
# call your function f1
f1 $PXE_IP
# If not OK-> IP invalid
if [ $? -eq 0 ] ; then
export PXE_IP="IP Invalid"
fi
fi
}
function read_all_configs() {
f2 'pxe-ip' 'ip'
# After call f2 if IP is invalid global Var PXE_IP="IP Invalid"
}
#
#f(IP到IP检查)
#返回true | false
函数f1(){
本地IP_TO_CHECK=“$1”
如果[“$IP_TO_CHECK”=~“$IP_REGEX”]]
然后
返回0
其他的
回显“无效IP”
返回1
结束
}
函数f2(){
#使用jq从json文件读取ip
#如果第二个参数为“ip”,则通过调用f1验证ip
#f1
本地MY_FIRST_PARM=“$1”
本地MY_SECOND_参数=“$2”
如果[“$MY_SECOND_PARAM”==“ip”];则
#做任何事
#调用函数f1
f1$PXE_IP
#如果不正常->IP无效
如果[$?-eq 0];则
导出PXE_IP=“IP无效”
fi
fi
}
函数读取所有配置(){
f2“pxe ip”“ip”
#调用f2后,如果IP无效,则全局变量PXE_IP=“IP无效”
}
您可以调用函数来修改变量:
f1() { if [[ $1 =~ $IP_REGEX ]]; then
pxe_ip=ip
return 0
else
pxe_ip='Invalid IP'
return 1
fi
}
function read_all_configs() {
if f1 'ip'; then
# do what is needed with a valid value of ip
echo "$pxe_ip"
else
# do what is needed with an invalid ip.
echo "$pxe_ip"
fi
}
在同一个shell中运行pxe ip时,您不能将其分配给pxe ip,即使在子shell中,其运行方式也不会有任何差异……您可能应该将错误消息写入stderr:
echo'Invalid ip'>&2
(以及阅读sorontar的答案)。谢谢,我明白了。我是这个门户网站的新手,我很抱歉我的演示,但这是gona,可以帮助你添加属性的语法。我是程序员,因为我在scholl学习所有东西,练习和youtube。我只是知道解决方案。没有链接,你可以用这个语法得到一些东西,对不起,兄弟,我不同意