[20210930]IFS= read -r line.txt

lfree發表於2021-10-08

[20210930]IFS= read -r line.txt

--//放假前看了一下如標題的寫法,不知道這個-r的主要作用.從網上抄的例子驗證看看.

$ echo "   a b c   " | { IFS= read -r line; echo "[$line]" ; }
[   a b c   ]

$ echo "   a b c   " | { read -r line; echo "[$line]" ; }
[a b c]

--//很容易混淆,實際上IFS=,臨時取消IFS設定,IFS預設空格,tab,回車三個字元.
--//在IFS=的情況下,read -r 可以保持前面的空格.

$ echo -n  "$IFS" |xxd -c 16 -g 1
0000000: 20 09 0a                         

$ echo "   a    b   c   " | { IFS= read -r line; echo "[$line]" ; }
[   a    b   c   ]

$ echo "   a    b   c   " | { read -r line; echo "[$line]" ; }
[a    b   c]

$ echo "   a    b   c   " | { read  line; echo "[$line]" ; }
[a    b   c]

--//可以發現對於中間的空格無效.當然-r還有獨特作用.例子:
$ echo "    a b\t c   " | { IFS= read   line; echo "[$line]" ; }| xxd -c 16 -g 1
0000000: 5b 20 20 20 20 61 20 62 74 20 63 20 20 20 5d 0a  [    a bt c   ].

--//有點不理解直接刪除\.

$ echo "    a b\t c   " | { IFS= read -r  line; echo "[$line]" ; }| xxd -c 16 -g 1
0000000: 5b 20 20 20 20 61 20 62 5c 74 20 63 20 20 20 5d  [    a b\t c   ]
0000010: 0a                                  

--//-r 保持\不解析.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2794819/,如需轉載,請註明出處,否則將追究法律責任。

相關文章