Shell

系統範圍的參數計數限制是否適用於 shell 函式?

  • November 11, 2018

另一個問題find詢問關於’s建立命令的限制-exec ... {} +。在這裡,我想知道這些限制與外殼的內部限制相比如何。它們是模仿系統限制還是獨立的?這些是什麼?

我是 Bash 使用者,但如果只是出於好奇,我會學習任何 Unix 和 Linux shell。

系統範圍的參數計數限制是否適用於 shell 函式?

execve()不,這是對程序用來執行不同執行檔以替換目前執行檔的系統呼叫的限制。這不適用於目前 shell 解釋器在同一程序中解釋的函式。這也不適用於內置實用程序。

execve()在載入和啟動新的執行檔之前擦除程序的記憶體。函式和內置函式的全部意義在於不會發生這種情況,因此函式可以修改 shell 的變數和其他參數,因此它們通常不會使用execve().

他們是否模仿系統限制

不。

或者他們是獨立的?

是的。

這些是什麼?

在目前 shell 程序的資源限制允許的範圍內。

bash手冊說:

數組的大小沒有最大限制,也沒有要求連續索引或分配成員。

這似乎適用,因為函式參數是一個內部 shell 數組(未傳遞給exec核心函式)。

從歷史上看,ksh88pdksh數組索引有一個下限,但對函式參數的數量沒有限制。您只能在 Bourne shell 中直接訪問$1, … $9,但您仍然可以向函式傳遞任意數量的參數,例如使用 遍歷所有參數,for arg do...或者將它們傳遞給另一個函式或使用"$@".

引用自:https://unix.stackexchange.com/questions/481163