首页 > 解决方案 > Bash中单行中用空格分隔的多个变量赋值

问题描述

对于 bash 中的变量赋值,我通常执行以下操作:

a=1
b=2
c=3

如果它在一行中完成,它将像:

a=1; b=2; c=3

最近我看到了一些代码,例如:

a=1 b=2 c=3

分配由空格分隔,它正在工作。我试图用谷歌搜索这种方法,但无法快速找到教科书的答案。现在我只知道,它有效。

那么,所有 shell 都支持这种语法,还是一种标准方法?

标签: bashvariable-assignment

解决方案


这是标准方法吗?

是的。

posix shell language 2.9.1 Simple Commands强调我的:

“简单命令”是一系列可选的变量分配和重定向,以任何顺序,可选地后跟单词和重定向,由控制运算符终止。

[...]

如果没有产生命令名,变量赋值将影响当前的执行环境。[...]

shell语法也可以看出:

simple_command   : cmd_prefix cmd_word cmd_suffix
                 | cmd_prefix cmd_word
                 | cmd_prefix
                 | cmd_name cmd_suffix
                 | cmd_name

cmd_prefix       :            io_redirect
                 | cmd_prefix io_redirect
                 |            ASSIGNMENT_WORD
                 | cmd_prefix ASSIGNMENT_WORD

您可以在命令之前放置任意数量的分配(和重定向)。如果没有命令,分配将影响当前 shell。


推荐阅读