![Linux 中的 IFS 变量](https://linux22.com/image/1618485/Linux%20%E4%B8%AD%E7%9A%84%20IFS%20%E5%8F%98%E9%87%8F.png)
亲爱的,知道为什么我看到的 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