shell腳本中IFS= read -r line的理解
IFS 是輸入字段分隔符,這意味著讀取的字符串將根據(jù) IFS 中的字符進行分割。在命令行中, IFS 通常是指任何空白字符,這就是為什么命令行會在空格處分割的原因
執(zhí)行類似 VAR=value command 的操作意味著 "修改命令的環(huán)境,使得 VAR 的值為 value "。基本上,命令 command 會將 VAR 視為具有值 value ,但在此之后執(zhí)行的任何命令仍然會將 VAR 視為其之前的值。換句話說,該變量將僅在那一行語句中被修改
所以當執(zhí)行 IFS= read -r line 時,你實際上是將 IFS 設(shè)置為一個空字符串(不使用任何字符來分割,因此不會發(fā)生分割),這樣 read 就會讀取整行并將其視為一個單詞,然后賦值給 line 變量。對 IFS 的修改只影響該語句,因此任何后續(xù)命令都不會受到該更改的影響。
將這個語句分成兩部分來理解,第一部分清除 IFS 變量的值,即等同于更易讀的 IFS="" ,第二部分是從標準輸入 read -r line 讀取 line 變量。
這種語法的特點在于,IFS 的賦值是暫時的,并且只對 read 命令有效。
-r 的作用是允許輸入以 \ 結(jié)尾時不被特殊處理,也就是說,反斜杠會被包含在 line 變量中,而不是作為續(xù)行字符,以允許多行輸入
可以查看如下連接,上面解釋的比較詳細
參考:https://unix.stackexchange.com/questions/209123/understanding-ifs-read-r-line

浙公網(wǎng)安備 33010602011771號