我经常看到IFS="value" command
它被称为临时更改 IFS(内部字段分隔符)的方法,仅在所提供的命令的持续时间内,但在许多情况下,在我看来类似的用法会失败。
我确信这些都是我的错误,但是在试图弄清楚我的误解是什么时,我完全无法找到任何官方文档,甚至谈到此功能的存在。
也许这是一个根本不知道要搜索哪个术语的真实情况,因为也许这个功能有一个我不知道的名称,并且无法通过相当合理的搜索量找到。
我尝试过搜索 BASH 手册、搜索 posix 规范的相关部分、询问 Bing 聊天等等。我似乎能找到的唯一结果是人们提到了这些功能的存在,但从来没有任何官方文档。除了知道它必须存在(因为它显然适用于我自己和其他人)之外,感觉好像这个功能,或者更确切地说,这个功能的官方文档根本不存在。
因此,我向 StackExchange 提出的问题是,这个功能到底叫什么名字,它的官方文档在哪里?
我现在正在寻找任何官方文档,无论是 BASH、Posix、Linux、Unix 还是任何东西。
答案1
这记录在「环境」栏目bash 手册中说:
任何简单命令或函数的环境都可以通过在其前面添加参数分配来临时增强,如 Shell 参数中所述。这些赋值语句仅影响该命令所看到的环境。
这意味着您所询问的语法并不特定于IFS
;它适用于任何多变的。例如,要HOME
为单个命令设置变量,我们可以运行:
HOME=/tmp/somedir mycommand
该语法也记录在bash(1)
手册页,其中写着(在“SHELL GRAMMAR”部分):
一个简单的命令是一系列可选的变量赋值,后跟空格分隔的单词和重定向,并由控制运算符终止。
在“简单命令扩展”部分:
当执行一个简单的命令时,shell 按照以下顺序从左到右执行以下扩展、赋值和重定向。
解析器标记为变量赋值的单词(命令名称前面的单词)和重定向将被保存以供以后处理。
不是变量赋值或重定向的单词会被扩展。如果扩展后仍有任何单词,则第一个单词将被视为命令名称,其余单词将被视为参数。
重定向按照上面“重定向”下的描述执行。
每个变量赋值中 = 后面的文本在赋值给变量之前都会经历波形符扩展、参数扩展、命令替换、算术扩展和引号删除。