prosource

'#' 문자를 명령줄 인수로 전달할 수 없습니다.

probook 2023. 9. 15. 21:08
반응형

'#' 문자를 명령줄 인수로 전달할 수 없습니다.

시작으로 문자열을 전달할 수 없습니다.#명령행 인수로서

간단한 테스트는 다음과 같습니다.

#include <stdio.h>

int main(int argc, char *argv[])
{
    for (int i = 1; i < argc; i++)
        printf("%s ", argv[i]);

    putchar('\n');

    return 0;
}

다음과 같이 인수를 입력하면 다음과 같습니다.

2 4 # 5 6

의 가치.argc3아닌6. 읽혀져 있습니다.#거기서 멈춥니다. 그런지 모르겠지만, C 프로그래밍 언어와 C Primer Plus의 복사본에서 답을 찾을 수 없습니다.

#유닉스 셸에서 코멘트를 시작합니다. 매우 유사합니다.//주식회사.

이는 셸이 인수를 프로그램에 전달할 때 # 뒤에 오는 모든 것을 무시한다는 것을 의미합니다.백슬래시 또는 따옴표를 사용하여 탈출하면 다른 매개 변수와 같이 처리되며 프로그램이 예상대로 작동해야 합니다.

2 4 \# 5 6

아니면

2 4 '#' 5 6

아니면

2 4 "#" 5 6

참고하세요.#는 단어의 시작 부분에만 주석 문자이므로 이 또한 작동해야 합니다.

2 4#5 6

명령줄 인수를 통해 값을 전달할 때 다음 지침을 수행해야 합니다.다음 문자는 일부 컨텍스트에서 셸 자체에 특별한 의미가 있으며 인수에서 제외해야 할 수도 있습니다.

` 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-조개같은.인용문#아니면 다른 방법으로 탈출할 수도 있습니다.\효과가 있을 겁니다

를 댓글이라고 합니다.sh. 그것은 원인입니다.#(공백 제거) 그리고 그 후에 폐기할 인수.코드를 문서화하는 데 사용되는 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는 여전히 확장됩니다.

언급URL : https://stackoverflow.com/questions/58837835/unable-to-pass-character-as-a-command-line-argument

반응형