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

相关内容