shell数组分隔符

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
%


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值