我正在创建一个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
而不是已声明且已设置的实际变量。
我如何构建执行语句,以便它将使用声明的变量而不是文字变量。
答案 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,并想知道为什么事情“不起作用”。