为什么在以下情况下 $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
,它具有壳变量的膨胀没有影响,这将在输出可被重新用作壳输入的格式的字符串,但。