这是我用来从数据库中选择字符串的代码。拆分然后写入文本文件。
#Get information from DB for the given entrynum
RETVAL=`sqlplus -s username/pwd@db <<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
答案 0 :(得分:2)
在数组赋值周围还需要一对parens
arr=($(echo $RETVAL | tr "-" "\n"))
$()
是一个评估。 arr=()
是复合作业。拆分是在空格上,所以你甚至可以使用空格而不是换行符来像这样
tr "-" " "
如果您的ksh不支持复合赋值,则可以使用set -A
set -A arr -- $(echo $RETVAL | tr "-" " ")