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:~$