linux 中 read命令的字符读取问题

在使用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为什么不是空呢。

阅读 6.3k
1 个回答

read命令天生就是以空格为分隔符的,在这里你指定和不指定IFS=' '效果是一样的。并且read天生就是要切掉一行的开头和结尾的空格,这个特性也是无法改变的。而唯一不让read切掉开头和结尾空格的作法是指定一个空IFS,如IFS='',但是这样一来,字符串中间的空格也不再被当作分隔符了。所以唯一的作法是把字符串中的空格替换成其它非空格的字符如逗号等等,然后再用IFS进行拆分。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题