为什么在以下情况下 $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)
在:
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的命令是从一个延伸部ksh,bash并且zsh,它具有壳变量的膨胀没有影响,这将在输出可被重新用作壳输入的格式的字符串,但。