Adm Tea Asked:2021-12-23 22:31:54 +0800 CST2021-12-23 22:31:54 +0800 CST 2021-12-23 22:31:54 +0800 CST while read oldrev newrev ref 是什么意思? 772 我尝试使用代码执行文件 while read oldrev newrev ref do echo "Ref $ref received." done 执行后,我在控制台中输入“任何值”并期望在答案中看到: 引用收到的任何值。 但那里 参考收到。 也就是说,该值为空。 它应该按我的预期工作吗? bash 1 个回答 Voted Best Answer aleksandr barakin 2021-12-23T23:44:11+08:002021-12-23T23:44:11+08:00 问题不是指git程序,而是指bash程序(从提供的链接中的文件内容如下),它是 posix 兼容 shell 的实现之一。 根据 posix 标准,程序或 shell-builtin 命令read应该从标准输入读取单行,将其拆分为单词,由环境变量IFS(默认- <space><tab><newline>)中的分隔符引导,并将它们顺序分配给其环境变量名称作为参数传递给此命令/程序。 read在您的情况下,一个由两个单词组成的字符串被传递给标准输入上的命令/程序- любое значение,并且三个参数被传递给它 - oldrev newrev ref。 因此,第一个单词 ( любое) 被分配给环境变量oldrev,第二个单词 ( значение) 被分配给环境变量newrev,并且ref没有为变量分配任何内容 - 没有传递足够多的单词。 while список1; do список2; done是用于组织循环的复合命令:首先执行一组命令список1,如果以非零返回码结束,则停止整个复合命令的执行,否则执行该组список2并从再次开始。
问题不是指git程序,而是指bash程序(从提供的链接中的文件内容如下),它是 posix 兼容 shell 的实现之一。
根据 posix 标准,程序或 shell-builtin 命令
read
应该从标准输入读取单行,将其拆分为单词,由环境变量IFS
(默认-<space><tab><newline>
)中的分隔符引导,并将它们顺序分配给其环境变量名称作为参数传递给此命令/程序。read
在您的情况下,一个由两个单词组成的字符串被传递给标准输入上的命令/程序-любое значение
,并且三个参数被传递给它 -oldrev newrev ref
。因此,第一个单词 (
любое
) 被分配给环境变量oldrev
,第二个单词 (значение
) 被分配给环境变量newrev
,并且ref
没有为变量分配任何内容 - 没有传递足够多的单词。while список1; do список2; done
是用于组织循环的复合命令:首先执行一组命令список1
,如果以非零返回码结束,则停止整个复合命令的执行,否则执行该组список2
并从再次开始。