2015-12-15 95 views
2

这里是我使用来选择从数据库的字符串的代码。拆分,然后写入一个文本文件。KSH分割字符串数组写入文件

#Get information from DB for the given entrynum 
RETVAL=`sqlplus -s username/[email protected] <<EOF 
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF 
SELECT (entrynum|| '-'||path||'-'|| syear||'-'|| eyear||'-'|| type) as RET 
    FROM entrydetails WHERE entrynum = 123; 

EXIT; 
EOF`  

print "$scriptname return value :$RETVAL " 1>&2 
#Output :123-/userx/data/tt-2015-2015-1 

#split each value into an array 
arr=$(echo $RETVAL | tr "-" "\n") 

#write to text variable 
writeText="export entrynum=${arr[0]}\n 
      export path=${arr[1]}\n 
      export Syear=${arr[2]}\n 
      export eyear=${arr[3]}\n 
      export type=${arr[4]}"; 

#write text to file 
echo $writeText > ../in/log_file 

输出我的文件中得到的是

export entrynum=123 /userx/data/1 2015 2015 1 
export path= 
export syesr= 
export eyear= 
export type= 

预期的结果是

export entrynum=123 
export path=/userx/data/1 
export syesr=2015 
export eyear=2015 
export type=1 

回答

2

你需要一个更对括号周围数组赋值

arr=($(echo $RETVAL | tr "-" "\n"))

$()是一个评估。 arr=()是一个复合赋值。斯普利特是空白,所以你可以只甚至使用空间,而不是换行到TR这样

tr "-" " "

,如果你的KSH不支持复合赋值可以使用set -A

set -A arr -- $(echo $RETVAL | tr "-" " ")

+0

得到一个语法错误“(”意外 – xGen

+0

它为我的作品 - 的ksh 版本SH(AT&T研究所)93u + 2012-08-01 - 另一种方法是使用一个明确的一套 - 我更新了答案,说明这 – cms

+0

尝试这检查verion [“'echo”\ c“| grep的C'”] && ksh93的回声回声|| ksh88,是ksh88。我仍然得到同样的错误 – xGen