Unix ksh将字符串拆分为数组以写入文件
下面是我用来从数据库中选择字符串的代码。拆分,然后写入文本文件Unix ksh将字符串拆分为数组以写入文件,unix,ksh,Unix,Ksh,下面是我用来从数据库中选择字符串的代码。拆分,然后写入文本文件 #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||'-'||
#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
export path=/userx/data/1
export syesr=2015
export eyear=2015
export type=1
在数组赋值周围还需要一对paren arr=$echo$RETVAL | tr-\n 美元是一个估价。arr=是复合赋值。Split是空白的,所以您甚至可以使用空格而不是换行符来像这样进行tr tr- 如果您的ksh不支持复合赋值,您可以使用set-A
set-A arr-$echo$RETVAL | tr-它对我有效-ksh版本sh AT&T Research 93u+2012-08-01-替代方法是使用显式集合-我更新了答案以说明这一点,并尝试检查验证[echo\c | grep c]&echo ksh93 | echo ksh88。是ksh88。我仍然得到同样的错误是的,你需要93的=。我更新了答案,提供了另一种选择
export entrynum=123
export path=/userx/data/1
export syesr=2015
export eyear=2015
export type=1