read 数组

hadoop@hadoop:~$ IFS=$tmpIFS

hadoop@hadoop:~$ IFS='#'

hadoop@hadoop:~$ echo "${IFS}"
#
hadoop@hadoop:~$ echo "wei#hon#rao"|while read -a names;do echo "the len of the array is ${#names[*]}";done
the len of the array is 3
hadoop@hadoop:~$ IFS=$tmpIFS

hadoop@hadoop:~$


注意在更改了IFS=‘#’ 要echo IFS的值必须用爽引号。


一个有意思的东西

类似以上的方式(采用IFS默认值空格)

hadoop@hadoop:~$ echo "wei hong rao"| read -a names
hadoop@hadoop:~$ echo ${#names[@]}
0

如果不用循环的话完全得不到names的值,只有用while

hadoop@hadoop:~$ echo "wei hong rao"| while read -a names;do echo "len is ${#names[*]}";done
len is 3


原因如同我的另一篇文章<

linux 管道产生子shell

>所提到的那样,使用管道会产生子shell,子shell不能访问主shell中的变量,反之亦然。

solution:

put all commands in sub-shell (in ())

hadoop@hadoop:~$ echo "wei hong rao "|(read -a names;echo ${#names[@]})
3
hadoop@hadoop:~$


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值