Shell

程序是否可以在 POSIX 中獲取命令行參數之間的空格數?

  • March 18, 2018

假設我使用以下行編寫了一個程序:

int main(int argc, char** argv)

現在它通過檢查argv.

程序可以檢測參數之間有多少空格嗎?就像我在 bash 中鍵入這些內容時一樣:

ibug@linux:~ $ ./myprog aaa bbb
ibug@linux:~ $ ./myprog       aaa      bbb

環境是現代 Linux(如 Ubuntu 16.04),但我想答案應該適用於任何符合 POSIX 的系統。

談論“論點之間的空格”是沒有意義的;這是一個外殼概念。

shell 的工作是獲取整行輸入並將它們組成參數數組以啟動命令。這可能涉及解析帶引號的字元串、擴展變數、文件萬用字元和波浪號表達式等等。該命令以標準exec系統呼叫開始,該呼叫接受字元串向量。

存在其他方法來創建字元串向量。許多程序通過預先確定的命令呼叫來分叉和執行它們自己的子程序——在這種情況下,永遠不會有“命令行”這樣的東西。類似地,當使用者拖動文件圖示並將其放在命令小元件上時,圖形(桌面)外殼可能會啟動一個程序 - 同樣,沒有文本行可以在“參數之間”包含字元。

就呼叫的命令而言,shell 或其他父/前程序中發生的事情是私有的和隱藏的——我們只看到標準 C 指定main()可以接受的字元串數組。

一般來說,沒有。命令行解析由 shell 完成,它不會使未解析的行對被呼叫程序可用。實際上,您的程序可能是從另一個創建 argv 的程序執行的,該程序不是通過解析字元串,而是通過以程式方式構造參數數組。

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