为什么在以下情况下 $IFS 不产生任何结果:
$ echo $IFS
尽管
$ printf '%q\n' "$IFS"
$' \t\n'
$ echo "$IFS" | od -bc
0000000 040 011 012 012
\t \n \n
0000004
答案1
在:
echo $IFS
你没有双引号变量,在所有类似 Bourne 的 shell 中受 glob+split 运算符影响的变量内容,除了zsh
:
echo glob(split($IFS))
字符IFS
本身用于拆分,因此$IFS
扩展为空,您只得到一个空行echo
。
当您双引号 时"$IFS"
, 的内容IFS
会按原样传递给 echo ,您会得到一个空格、制表符和换行符,它们是 的默认值IFS
。
%q
command指令printf
是ksh
, bash
and的扩展zsh
,它将以可重用为 shell 输入的格式输出字符串,但对 shell 变量的扩展没有影响。