我有一個包含變量名稱的數組。在這些變量中,我使用循環來分配值。然後,我將這些變量名稱與另一個函數分配給另一個函數,該函數檢查有效輸入。重新初始化創建爲變量的變量
我需要做的是檢查變量的值是否包含特定的符號,如果是,則截斷該值。
例子:當被問及對「管理網關:」我爲例如值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