在使用read时候 碰到以下问题,与所想不一致,代码及结果如下
#!/bin/bash
IFS=' ' read -d '-' var1 var2 <<< " 123 -"
printf "%s\n" "var1=$var1= var2=$var2="
IFS='|' read -d '-' bar1 bar2 <<< "|123|-"
printf "%s\n" "bar1=$bar1= bar2=$bar2="
我预期的结果应该是
var1== var2=123=
bar1== bar2=123=
但实际的结果是这样
var1=123= var2==
bar1== bar2=123=
我的疑问,对于第一个测试例子来讲,我既然指定了IFS的分隔符为' '空格,那么 var1为什么不是空呢。
read
命令天生就是以空格为分隔符的,在这里你指定和不指定IFS=' '
效果是一样的。并且read
天生就是要切掉一行的开头和结尾的空格,这个特性也是无法改变的。而唯一不让read
切掉开头和结尾空格的作法是指定一个空IFS
,如IFS=''
,但是这样一来,字符串中间的空格也不再被当作分隔符了。所以唯一的作法是把字符串中的空格替换成其它非空格的字符如逗号等等,然后再用IFS
进行拆分。