Bash:如果 x 是 @,为什么 echo $x 会打印换行符?

Bash:如果 x 是 @,为什么 echo $x 会打印换行符?

考虑以下场景:

$ 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

相关内容