鍍金池/ 問答/Linux/ linux 中 read命令的字符讀取問題

linux 中 read命令的字符讀取問題

在使用read時候 碰到以下問題,與所想不一致,代碼及結(jié)果如下

#!/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="

我預(yù)期的結(jié)果應(yīng)該是

var1== var2=123=
bar1== bar2=123=

但實際的結(jié)果是這樣

var1=123= var2==
bar1== bar2=123=

我的疑問,對于第一個測試?yán)觼碇v,我既然指定了IFS的分隔符為' '空格,那么 var1為什么不是空呢。

回答
編輯回答
撿肥皂

read命令天生就是以空格為分隔符的,在這里你指定和不指定IFS=' '效果是一樣的。并且read天生就是要切掉一行的開頭和結(jié)尾的空格,這個特性也是無法改變的。而唯一不讓read切掉開頭和結(jié)尾空格的作法是指定一個空IFS,如IFS='',但是這樣一來,字符串中間的空格也不再被當(dāng)作分隔符了。所以唯一的作法是把字符串中的空格替換成其它非空格的字符如逗號等等,然后再用IFS進行拆分。

2017年4月23日 05:36