考虑以下场景:
$ x=y
$ echo $x
y
$ x=@
$ echo $x
<newline>
为什么如果是的话echo$x
会打印换行符?x
@
答案1
假设:你的$IFS
包含@
。
x=@
工作正常,这里没有扩展,$IFS
没关系。您可以通过传递以下代码来确认$x
扩展为@
正确引用值echo
:
echo "$x"
由于您在原始代码 ( ) 中没有使用双引号echo $x
,因此 shell 使用 中的字符$IFS
来拆分扩展的值。该值@
被拆分为两个空字符串。然后未加引号的空字符串消失了。结果就像您运行:
echo
即echo
不带任何参数。默认情况下,echo
打印一个终止换行符。
$IFS
要以人类可读的形式查看所有字符:
printf '%s' "$IFS" | od -c