為什麼 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

相關內容