[英]Unable to pass '#' character as a command-line argument
我不能以#
開頭的字符串作為命令行 arguments 傳遞。
這是一個簡單的測試:
#include <stdio.h>
int main(int argc, char *argv[])
{
for (int i = 1; i < argc; i++)
printf("%s ", argv[i]);
putchar('\n');
return 0;
}
如果我輸入 arguments 如下:
2 4 # 5 6
argc
的值是3
而不是6
。 它讀取#
並停在那里。 我不知道為什么,在我的The C Programming Language和C Primer Plus的副本中找不到答案。
#
在 Unix shell 中開始注釋,很像//
在 C 中。
這意味着當 shell 將 arguments 傳遞給程序時,它會忽略 # 之后的所有內容。 Escaping 它帶有反斜杠或引號將意味着它被視為其他參數並且程序應該按預期工作。
2 4 \# 5 6
或者
2 4 '#' 5 6
或者
2 4 "#" 5 6
請注意, #
是僅在單詞開頭的注釋字符,因此這也應該有效:
2 4#5 6
通過命令行 arguments 傳遞值時,您必須按照以下說明進行操作。 以下字符在某些情況下對 shell 本身具有特殊含義,可能需要在 arguments 中轉義:
` Backtick (U+0060 Grave Accent)
~ Tilde (U+007E)
! Exclamation mark (U+0021)
# Hash (U+0023 Number Sign)
$ Dollar sign (U+0024)
& Ampersand (U+0026)
* Asterisk (U+002A)
( Left Parenthesis (U+0028)
) Right parenthesis (U+0029)
(⇥) Tab (U+0009)
{ Left brace (U+007B Left Curly Bracket)
[ Left square bracket (U+005B)
| Vertical bar (U+007C Vertical Line)
\ Backslash (U+005C Reverse Solidus)
; Semicolon (U+003B)
' Single quote / Apostrophe (U+0027)
" Double quote (U+0022)
↩ New line (U+000A)
< Less than (U+003C)
> Greater than (U+003E)
? Question mark (U+003F)
Space (U+0020)1
這是因為您使用的是類似sh
的 shell。 引用#
或使用\
對其進行轉義,它將起作用。
這在sh
中稱為注釋。 它會導致#
(空格哈希)和任何 arguments 被丟棄。 它與 C 中的注釋類似,用於記錄代碼。
以$
開頭的字符串在sh
中稱為變量。 如果您沒有設置變量,它將擴展為一個空字符串。
例如,所有這些都是將#
傳遞給您的應用程序的有效方法:
2 4 '#' 5 6
2 4 "#" 5 6
2 4 \# 5 6
這些將是傳遞以$
開頭的字符串的有效方法:
2 4 '$var' 5 6
2 4 '$'var 5 6
2 4 \$var 5 6
請注意, "
s 中的變量仍然被擴展。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.