为什么变量扩展没有显示任何内容?

Tim*_*Tim 0 bash

为什么在以下情况下 $IFS 没有任何结果:

$ echo $IFS
Run Code Online (Sandbox Code Playgroud)

尽管

$ printf '%q\n' "$IFS"
$' \t\n'

$ echo "$IFS" | od -bc
0000000 040 011 012 012
             \t  \n  \n
0000004
Run Code Online (Sandbox Code Playgroud)

cuo*_*glm 5

在:

echo $IFS
Run Code Online (Sandbox Code Playgroud)

你没有双引号变量,在所有类似 Bourne 的 shell 中受 glob+split 运算符影响的变量内容,除了zsh

echo glob(split($IFS))
Run Code Online (Sandbox Code Playgroud)

字符IFS本身用于拆分,因此$IFS扩展为空,您只能从echo.

当您使用双引号时"$IFS", 的内容按IFS原样传递给 echo,您会得到一个空格、一个制表符和一个换行符,它们是 的默认值IFS


%q的指令printf的命令是从一个延伸部kshbash并且zsh,它具有壳变量的膨胀没有影响,这将在输出可被重新用作壳输入的格式的字符串,但。