从文本文件构建执行字符串

时间:2014-03-26 19:39:33

标签: shell unix ksh

我正在创建一个shell脚本,用于从数据库中检索值并将假脱机检索到文本文件中。这些值将在数据库中包含变量($ CURR_DATE $ SITE等...)。因此,当我想用​​这些变量执行程序时,我遇到的问题是它使用的是文字字符串而不是变量中的值。

例如。

while read line;
      do
         Unix_Array[$counter]=$line;
         let counter=counter+1;
      done < parameterfile.txt
      echo "Finished putting into array"
      while [[ $c -lt ${#Unix_Array[@]} ]]
         do
            PARAMS="${PARAMS:-}${PARAMS:+ }${Unix_Array[$c]}"
            ((c=$c+1))
         done
echo "Finished creating parameter string"


EXECUTE="$PROGRAM $USERID $PARAMS"
echo $PARAMS
$EXECUTE

我认为它正在执行

Program user/id@DB $CURR_DATE $SITE

而不是已声明且已设置的实际变量。

我如何构建执行语句,以便它将使用声明的变量而不是文字变量。

1 个答案:

答案 0 :(得分:2)

收集完阵列后,直接使用它:

typeset -a params
while IFS= read -r line; do
    params[n++]=$line; 
done < parameterfile.txt

"$program" "$userid" "${params[@]}"

对于包含变量的行,我犹豫地建议使用eval。参数文件是什么样的?谁有权写信?

摆脱使用ALL_CAPS_VARS的习惯:有一天你会使用PATH或LANG,并想知道为什么事情“不起作用”。