IFS 到底是如何渲染的?

IFS 到底是如何渲染的?

我读过 bash 手册页和其他文档,但我发现解释有点令人困惑。

我有以下简单的脚本:

#!/bin/bash

IFS=""

echo $2

var=A B C

echo $var

如果我执行它,例如:

LANG=C ./args2 3 4
4
./args2: line 7: B: command not found

我真的不明白,为什么2美元=4?如果手册说:

如果IFS的值为空,则不会发生分词。

与 var 声明相同,为什么它会抱怨“B”?那么无论如何都存在分词吗?

答案1

bash 手册的这一部分列出了以下步骤:外壳操作

在步骤 3 中,脚本被分解为命令、参数等。

  • 在这一步中,我们得到标记“var=A”、“B”和“C”
  • 参见部分简单命令它说(强调我的):

    一个简单的命令是 [...] 只是一系列由 分隔的单词空白

在扩展(步骤 4)之前不会执行分词。

正如 Qudit 所解释的那样,你的shell 将“LANG=C ./args2 3 4”拆分为标记启动命令“./args2”

答案2

在脚本运行之前,IFS 有其默认值。参数拆分是在运行脚本的 bash 实例中完成的,它会正常拆分内容,因为您尚未设置 IFS。

相关内容