4
A
回答
2
不,shell不會爲你解析它。每個程序都必須自行解析。下面的代碼應該清楚發生了什麼。
#include <stdio.h>
int main(int argc, char **argv)
{
int i;
printf("argc: %d\n", argc);
for (i = 0; i < argc; i++) {
printf("argv[%d] = %s\n", i, argv[i]);
}
return 0;
}
讓我們來編譯這個程序。
[email protected]:~$ gcc args.c -o args
現在讓我們來運行這個,看看輸出:
[email protected]:~$ ./args
argc: 1
argv[0] = ./args
[email protected]:~$ ./args foo bar
argc: 3
argv[0] = ./args
argv[1] = foo
argv[2] = bar
[email protected]:~$ ./args -a foo --b bar
argc: 5
argv[0] = ./args
argv[1] = -a
argv[2] = foo
argv[3] = --b
argv[4] = bar
殼做的唯一的事情就是通過在命令行程序指定每個參數。雖然它會通過foo bar
作爲您程序的兩個獨立參數,但它會通過"foo bar"
或'foo bar
'作爲您程序的單個參數。是的,所以在將參數傳遞給程序之前,shell會對參數進行某種解析。它將引用的字符串視爲單個參數。下面是一個演示:
[email protected]:~$ ./args -a foo bar
argc: 4
argv[0] = ./args
argv[1] = -a
argv[2] = foo
argv[3] = bar
[email protected]:~$ ./args -a "foo bar"
argc: 3
argv[0] = ./args
argv[1] = -a
argv[2] = foo bar
[email protected]:~$ ./args -a 'foo bar'
argc: 3
argv[0] = ./args
argv[1] = -a
argv[2] = foo bar
[email protected]:~$ ./args -a "foo bar" 'car tar war'
argc: 4
argv[0] = ./args
argv[1] = -a
argv[2] = foo bar
argv[3] = car tar war
1
每個程序都必須解析所有參數本身。用破折號前綴它們只是Unix慣例。
7
每個程序都解析它的參數。你可能會想看看getopt
這樣的答案變成:每個程序通常依靠getopt
解析參數。
1
不,shell不解析這些選項。每個程序都必須自行解析。
1
shell將命令行分割爲空格,以便程序接收參數列表;但是由程序決定他們的意思。通常使用像getopt
這樣的參數解析庫來提供幫助。
0
程序參數不是shell的問題。
(簡化)命令行語法是:命令選項操作數。
選項以連字符(短劃線)開頭,操作數沒有,選項沒有排序,操作數是有序的。
這雖然只是一個慣例,而不是法律。最爲人熟知的標準通常被稱爲POSIX標準,它定義了命令行here。
您可能會注意到,選項是以單個連字符作爲前綴的單個字符,您的示例顯示了帶有多個字符的兩個連字符--bar
。這些被稱爲長選項並不嚴格地作爲標準的一部分,儘管它們通常用於GNU實用程序(Linux上的正常情況)。
如果操作數以連字符開頭會發生什麼?答案是大多數程序會將其視爲操作數。雖然有一個特殊的標記, --
(兩個連字符)標記選項列表的末尾,因此以下任何內容都只是操作數。
相關問題
- 1. 帶有破折號的參考命令名稱
- 2. 關於linux內核命令行開關的三重破折號
- 3. 帶有破折號或斜槓的shutdown.exe參數?
- 4. 什麼 - >(破折號破折號大於)運算斯威夫特
- 5. targetNamespace和不帶前綴的xmlns有什麼區別?
- 6. web.xml中帶有前綴「javaee:」的標籤和「javaee:」不帶有什麼區別?
- 7. 命令參數和菜單貢獻參數有什麼區別
- 8. 爲什麼前綴返回沒有特定前綴的文檔?
- 9. 從命令行/蝙蝠帶有參數
- 10. 關於0x55AA有什麼特別之處?
- 11. npm命令中的 - 和 - (單和雙破折號)區別
- 12. 帶有前綴
- 13. 帶有參數的sql cmd命令
- 14. c中的命令行參數和scanf函數有什麼區別?
- 15. 運行命令和cmd命令有什麼區別?
- 16. bat和sh之間的命令行參數語法有什麼區別?
- 17. 什麼是sbt的命令行參數?
- 18. 有關參數的maven命令
- 19. 沒有命令行參數
- 20. 帶破折號的名稱映射到操作參數?
- 21. 有什麼網站有Linux的命令行環境,用於練習命令嗎?
- 22. 關於Java命令行參數
- 23. 帶有空格的命令行參數的Perl腳本
- 24. 爲什麼WordPress的放「 - 」(破折號)在網站標題前
- 25. elasticbean中的命令和容器命令有什麼區別
- 26. 有什麼區別複製命令 - windows
- 27. 這些POST命令有什麼區別?
- 28. 一些OpenCV命令有什麼區別?
- 29. mvn:deploy和mvn:install命令有什麼區別?
- 30. linux和unix命令有什麼區別?
這裏的約定通常使用單個'-'來表示參數'svn -v' vs'svn --version'的快捷鍵。 – 2012-08-17 07:18:43
你觀察到了什麼? – Vijay 2012-08-17 07:18:47
@ Jens,@ H2C03:修正:) – user1516425 2012-08-17 07:25:22