采购文件时的变量替换

时间:2015-10-27 09:09:35

标签: bash variables

假设我们正在寻找包含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)

谢谢!

2 个答案:

答案 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。你的问题将得到解决。