我有一个包含变量名称的数组。在这些变量中,我使用循环来分配值。然后,我将这些变量名称与另一个函数分配给另一个函数,该函数检查有效输入。重新初始化创建为变量的变量
我需要做的是检查变量的值是否包含特定的符号,如果是,则截断该值。
例子:当被问及对“管理网关:”我为例如值192.168.1.254/20(这是废话)进入,我想这个值被截断为192.168.1.254
在初始化$1="something"
不工作,它返回错误admGW=192.168.1.254: command not found
我试过类似declare $1="something"
,但这只会创建另一个局部变量在当前函数中可见。我需要重新初始化现有的全局变量。这可能不是最好的方法,但我很好奇这种变量初始化是否可行。
示例代码:
#!/bin/bash
read_variables(){
all_vars_desc=("Admin IP/mask: " "Admin gateway: ")
all_vars_name=("admIP" "admGW")
for ((i=0; i<${#all_vars_desc[*]}; i++)); do
read -p "${all_vars_desc[$i]}" ${all_vars_name[$i]}
check_value ${all_vars_name[$i]} "${!all_vars_name[$i]}"
done
}
check_value(){
case $1 in
*IP) ;; #some code
*GW) if [[ "$2" == */* ]]; then
$1=$(echo "$2" | awk -F/ '{print $1}')
echo "Truncating to ${!1}"
fi;;
esac
}
read_variables
感谢您的回答。我也曾尝试在属性“-g”之前声明(抱歉,我没有提及它),但在我的CentOS虚拟机中没有属性“-g”。 '声明[-aAfFilrtux] [-p] [名称[=值] ...]'。我不确定它是否会出现在目标系统上。没有任何其他方式如何实现预期的结果? “否”也可以作为答案:D – Lopfest
@Lopfest:它不是关于CentOS机器,你有一个过时的'bash'版本。认为你可以升级它?你能向我们展示'bash --version'吗? – Inian
当然。 'GNU bash,版本4.1.2(2) - 发布(x86_64-redhat-linux-gnu)' – Lopfest