为什么 bash 手册页显示特殊参数“只能被引用;不允许对它们进行赋值”?

为什么 bash 手册页显示特殊参数“只能被引用;不允许对它们进行赋值”?

man bash内容如下:

Special Parameters
       The shell treats several parameters specially.
       These parameters may only be referenced; assignment to them is not allowed.

好吧,shift改变@*(当然,以同样的方式)。实际上set -- one two three分配了我想要的任何内容@*

那么我是否误解了man页面上的内容?

答案1

您不能分配给特殊参数。您不能使用赋值运算符(1=foo, @=(foo bar), ?=0, ...)。您不能使用赋值参数扩展构造(${1=foo},...)。

当然,您可以修改它们,但您必须使用赋值以外的间接方法,例如set(带非选项参数)或shift内置函数来设置位置参数,以及$#, set(带选项)来修改$-,运行命令来设置$?, ETC。

作为例外,您实际上可以分配给_,尽管它通常不会粘住(_=foo a=$_设置afoo_为空字符串)。

答案2

您问题的核心在于任务是什么。man bash显然没有定义它,但是POSIX 规范中有一个词

4.23 变量赋值

shell命令语言中的一个单词由以下部分组成:

变量名=值

您可以通过某些 shell 内置方法修改特殊参数,但实际上无法为它们编写$@赋值。我想说,它们的选择是明智的,因为即使对于没有受过如此训练的眼睛来说,$*写作确实看起来非常不自然。*=string

相关内容