Shell脚本函数与全局变量

时间:2017-05-17 07:22:02

标签: function shell variables whiptail

昨天我有一个非常简单的任务,但不幸的是看起来我不能用一个很好的代码。

任务简要说明:我有很多参数,我想在安装程序脚本中用whiptail“interactive”模式询问。

代码的细节:

#!/bin/bash

address="192.168.0.1" # default address, what the user can modify
addressT="" # temporary variable, that I want to check and modify, thats why I don't modify in the function the original variable
port="1234"
portT=""
... #there is a lot of other variable that I need for the installer

function parameter_set {
    $1=$(whiptail --title "Installer" --inputbox "$2" 12 60 "$3" 3>&1 1>&2 2>&3) # thats the line 38
}

parameter_set "addressT" "Please enter IP address!" "$address" 
parameter_set "portT" "Please enter PORT!" "$port"

但是我收到了以下错误:

"./install.sh: line: 38: address=127.0.0.1: command not found"

如果我将变量修改为另一个(不是函数的参数),那么效果很好。

function parameter_set {
    foobar=$(whiptail --title "Installer" --inputbox "$2" 12 60 "$3" 3>&1 1>&2 2>&3)
    echo $foobar
}

我尝试使用全局retval变量,并将函数外部分配给原始变量,它可以工作,但我认为这不是最好的解决方案。

有人可以帮助我吗,我做错了什么? :)

提前致谢(抱歉我的英文不好......), 阿提拉

1 个答案:

答案 0 :(得分:0)

由于重定向,您的whiptail命令似乎没有产生任何输出。因此命令替换将值留空。尝试删除它们。最好先将新值保存到局部变量:

parameter_set() {
    local NAME=$1
    local NEWVALUE=$(whiptail --title "Installer" --inputbox "$2" 12 60 "$3")
    export $NAME="$NEWVALUE"
}