使用参数调用函数而不使用subshel​​l - bash

时间:2016-12-02 08:09:42

标签: linux bash

我对bash不太熟悉。我有一个场景,我正在调用一个带有一些参数的函数,并将返回值赋给变量。

以下是示例代码:

frame.getContentPane()

问题是当检测到错误的IP时,变量'pxe-ip'被赋值为'无效IP',因为 f2 是从子shell 调用的,是否可以在同一个shell中使用参数调用函数

3 个答案:

答案 0 :(得分:1)

我建议下一个解决方案:

  1. 使用传递参数的函数:函数从$ 1,$ 2,...获取参数以阐明对本地变量的赋值并使用该
  2. Bash函数返回0 Ok,!= 0 Error
  3. 下一个代码是怎么样的(我很难理解你尝试做什么)但是你正在寻找的是近似的代码:

    # 
    # 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"
    }
    

答案 1 :(得分:1)

您只需调用该函数即可修改变量:

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
}

答案 2 :(得分:0)

您可以将函数用作f2(IP_REGEX)作为