親愛的,知道為什麼我看到 IFS 變數的空白值嗎?
bash-4.2$ set | grep -i ifs
IFS=$' \t\n'
bash-4.2$ echo $IFS
bash-4.2$
bash-4.2$
答案1
您看到的是空白值,因為就是這樣是始終儲存在 IFS 中:它包含一個空格(不可見)、一個製表符(也不可見)和一個換行符(也不可見)。
它不包含美元符號,也不包含任何反斜杠,也不包含任何字母:這就是set
嘗試顯示包含不可見字元的變數的簡單方式。因此,他\t
代表製表符,而\n
代表換行符,周圍$'...'
表示反斜線組合將被解釋為特殊字元而不是文字文字。
set
使用這種特定格式,因為它也可以給出後退作為其他命令的一部分發送到 shell。例如,runecho $'Hello\tworld!
會在 位置列印一個選項卡\t
。而實際上跑步 IFS=$' \t\n'
作為命令確實會將 IFS 變數設定為空格+製表符+換行符。
答案2
因為\t
和\n
在輸入時被解析並轉換為實際的字元代碼。因此, 的輸出echo $IFS
看起來像空格(有些空格被參數解析刪除,因為您沒有引用)。如果您想查看實際內容,請轉換為十六進制,並且不要忘記引用以避免字元被解析出來:
IFS=$' \t\n'
printf '%s' "$IFS" | hd
00000000 20 09 0a | ..|
00000003
0