我在bash中有一个函数,它将param作为字符串,例如:
MYSQL_DATABASE
然后我想在我的文件中创建一个名为VAR_MYSQL_DATABASE
的var,但我无法获得该值。
create_var()
{
read -p "Enter $1 : " VAR_$1
printf VAR_$1 // print VAR_MYSQL_DATABASE_NAME instead what I typed, so how do I get the value?
if [[ -z VAR_$1 ]]; then
printf '%s\n' "No input entered. Enter $1"
create_entry $1
fi
}
create_var "MYSQL_DATABASE_NAME"
答案 0 :(得分:2)
使用bash
中内置的declare
,
name="MYSQL_DATABASE"
declare VAR_${name}="Some junk string"
printf "%s\n" "${VAR_MYSQL_DATABASE}"
Some junk string
通过上述逻辑,您可以修改name
变量的控制方式,可以在本地存在。如果它作为参数从函数/命令行执行
declare VAR_${1}="Your string value here"
也许你想要实现这样的目标,
create_var()
{
read -p "Enter value: " value
declare -g VAR_$1="$value"
dynamVar="VAR_$1"
if [[ -z "${!dynamVar}" ]]; then
printf '%s\n' "No input entered. Enter $1"
create_entry $1
fi
}
所以,这里我们使用declare
内置创建动态变量,动态部分VAR_$1
不能直接作为普通变量引用,因此使用间接扩展{!variable}
来看看创建的变量是否可用。
答案 1 :(得分:2)
尝试以下方法:
#!/bin/bash
create_var() {
declare -g VAR_$1
ref=VAR_$1
read -p "Enter $1: " "VAR_$1"
echo "inside : ${!ref}"
}
create_var "MYSQL_DATABASE_NAME"
echo "output : $VAR_MYSQL_DATABASE_NAME"
declare -g
将确保变量存在于函数范围之外,"VAR_$1"
用于动态创建变量名。
输出:
Enter MYSQL_DATABASE_NAME: Apple
inside : Apple
output : Apple
答案 2 :(得分:1)
您可以使用printf
功能和-v
选项来打印"打印"变量名。
create_var()
{
while : ; do
IFS= read -r -p "Enter $1 : " value
if [[ -n $value ]]; then
printf -v "VAR_$1" '%s' "$value"
return
fi
printf 'No input entered. Enter %s\n' "$1"
done
}
(我已经用循环重写了你的函数,以避免看起来像是递归的尝试。)