【发布时间】:2017-04-28 01:17:54
【问题描述】:
我正在编写一个与 sqlplus (oracle) 一起使用的 shell 脚本,代码如下:
#!/usr/bin/bash
################ Checking tables ###################
TABLES=$(sqlplus -s ${DBUSER}/${DBPASS}@${DBHOST} <<EOF
...
EOF
)
SuccessTabs=$TABLES
########## Export data from tables to file #########
for TABLE in $TABLES
do
echo "--- Processing $TABLE ---" >> $Log
FILE=$TABLE.csv
TotFiles=$TotFiles$FILE" " -------------------------> (1) Not understand this line ?
sqlplus -s ${DBUSER}/${DBPASS}@${DBHOST} <<EOF
...
SPOOL $FILE
Select ... FROM $TABLE;
SPOOL OFF
EXIT
EOF
return=$?
if [ $return != 0 ]
then
SuccessTabs=({$SuccessTabs[@]/$TABLE}) -------------> (2) Not understand this line ?
else
echo "--- $TABLE.csv process success ---" >> $Log
fi
done
echo "--- Process all tables success --- " >> $Log
echo "$SuccessTabs " >> $Log
FinalFile=FINAL_"_"${rundate}_${logtime}".csv"
echo "--- Merge all files into $FinalFile ---" >> $Log
cat $TotFiles > $FinalFile
问题是我有两个命令行,即使我从字面上知道它用于打印结果,但仍然不明白它的语法和机制。
(1)TotFiles=$TotFiles$FILE" " 什么是双引号,末尾有空格,为什么这样的语法?
(2)SuccessTabs=({$SuccessTabs[@]/$TABLE})[],@,/组合在一起用于这个命令,为什么这样的语法,尤其是[@],我想知道这是什么?
有人可以帮我弄清楚吗?谢谢你。
【问题讨论】: