Linux 中的 IFS 變數

Linux 中的 IFS 變數

親愛的,知道為什麼我看到 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

相關內容