pmor Asked: 2023-05-23 23:52:04 +0800 CST2023-05-23 23:52:04 +0800 CST 2023-05-23 23:52:04 +0800 CST Bash:如果 x 是 @,为什么 echo $x 打印换行符? 772 考虑这种情况: $ x=y $ echo $x y $ x=@ $ echo $x <newline> 如果是,为什么 echo$x打印换行符?x@ bash 1 个回答 Voted Best Answer Kamil Maciorowski 2023-05-24T00:12:05+08:002023-05-24T00:12:05+08:00 假设:你的$IFS包含@. x=@按预期工作,这里没有扩展,$IFS没关系。您可以通过将正确引用的值传递给来确认$x扩展为:@echo echo "$x" 因为您没有在原始代码 ( echo $x) 中使用双引号,所以 shell 使用 in 中的字符$IFS来分割扩展值。该值@被拆分为两个空字符串。然后未加引号的空字符串消失了。结果就像你运行: echo 即echo零参数。默认情况下echo打印一个终止换行符。 $IFS要以人类可读的形式查看您的所有字符: printf '%s' "$IFS" | od -c
假设:你的
$IFS
包含@
.x=@
按预期工作,这里没有扩展,$IFS
没关系。您可以通过将正确引用的值传递给来确认$x
扩展为:@
echo
因为您没有在原始代码 (
echo $x
) 中使用双引号,所以 shell 使用 in 中的字符$IFS
来分割扩展值。该值@
被拆分为两个空字符串。然后未加引号的空字符串消失了。结果就像你运行:即
echo
零参数。默认情况下echo
打印一个终止换行符。$IFS
要以人类可读的形式查看您的所有字符: