假设我们正在寻找包含1000个变量的文件: VAR1 = 50 .... var1000 = 100
如何扩展这些变量,以便如果我定义一个与var1 ... var1000匹配的参数作为字符串,它将显示它们的值?例如:
#!/bin/bash
source file
var3=$1 #assume that $1=var1
# [ variable substitution here ]
if [ -z $var3 ];then
echo "variable value is: ... " <-i want value of 50 to be printed
else
echo "variable does not exist"
fi
# (if $1=var1 or $1=var2)
谢谢!
答案 0 :(得分:3)
不要理解这个问题,但假设你想做这样的事情。 您需要检查源文件中的值。
以下使用bash indirect expansion:
参数扩展的基本形式是
dt <- data.table( udh = LETTERS[c(1,1,1,1,2,2,3,3,3,4,5,5)], ct = c('A000','A111','A222','A333','B444','B555','C666','C777','C888','D999','E1010','E1010'), pop_udh = c(40,40,40,40,30,30,45,45,45,17,20,20), pop_ct = c(20,10,8,2,25,5,5,30,10,17,20,20), poor_prop_udh = c(10,10,10,10,5,5,8,8,8,7,9,9), geoid = c('id1','id2','id2','id1','id1','id3','id3','id5','id4','id2','id6','id7'))
。[...]
如果参数的第一个字符是感叹号(!),它会引入一个变量间接层。 Bash使用从参数的其余部分形成的变量的值作为变量的名称;然后展开此变量,并在替换的其余部分中使用该值,而不是参数本身的值。这称为
${parameter}
。
indirect expansion
假设#!/bin/bash
source file
var3="$1" #assume that $1=var1
if [[ -n ${!var3} ]];then
#Check if the variable that has been sent to script has value in sourced file
echo "variable value is: ${!var3}"
#If it does echo the value
else
echo "variable does not have value"
#if it doesn't then state it has no value
fi
在文件中且文件中没有var1=50
,则下面是一个使用示例。
var20
答案 1 :(得分:0)
在if
条件下,使用$((var3))
代替$var3
。你的问题将得到解决。