shell数组分隔符

来源:互联网 发布:刷机游戏数据 编辑:程序博客网 时间:2024/04/28 12:23
shell数组默认拿空格当分隔符,但如果元素里面包含空格怎么办呢?

% cat t3.sh
#!/usr/bin/ksh

set -A arr1 `sqlplus -s /NOLOG <<EOF
connect username/password@SID;
whenever sqlerror exit sql.sqlcode
set pagesize 0 feedback off verify off heading off echo off
SELECT col1|| ':' || col2 from t1;
exit;
EOF`
i=0
while [ $i -lt ${#arr1[*]} ]
do
  echo ${arr1[$i]}
  let i=$i+1
done

t1表有两条记录记录
SQL> select * from t1;
 
      COL1 COL2
---------- ----------
         1 aa
         2 bb cc
 
但是t3.sh脚本执行结果却显示有3条记录,原因就是'bb cc'中间的空格当成了数组的分隔符。
golddev OEA#/tmp >./t3.sh
1:aa
2:bb
cc

尝试给字段加单引号、双引号、回车符、换行符都不管用。
chr(10)||col1|| ':' || col2 ||chr(10)
chr(13)||col1||':'||col2||chr(13)
'"'||||col1||':'||col2||'"'
''''||col1||':'||col2||''''

用IFS重新定义分隔符才解决了这个问题。

% cat t3.sh
#!/usr/bin/ksh

IFS="!!"

set -A arr1 `sqlplus -s /NOLOG <<EOF
connect username/password@SID;
whenever sqlerror exit sql.sqlcode
set pagesize 0 feedback off verify off heading off echo off
SELECT col1|| ':' || col2 from t1;
exit;
EOF`
i=0
while [ $i -lt ${#arr1[*]} ]
do
  echo ${arr1[$i]}
  let i=$i+1
done

执行结果如下
%./t3.sh
1:aa
2:bb cc
%


原创粉丝点击