실제로 전달되는 명령줄 인수(예: "some.text")는 어디에 있습니까?

실제로 전달되는 명령줄 인수(예: "some.text")는 어디에 있습니까?

내가 아는 한, 명령에 전달된 인수는 STDIN 스트림으로 전달됩니다.

그래서 이거:

cut -d. -f2 'some.text'

정확히 다음과 같아야 합니다.

echo 'some.text' | cut -d. -f2

STDIN으로 보낼 때 some.text. 첫 번째 경우에는 매개변수를 통해, 두 번째 경우에는 파이프를 통해.

some.textSTDIN이 아닌 경우 첫 번째 샘플의 매개변수는 어디로 가나요?

답변1

아니요, 명령줄을 통해 전달된 인수는 STDIN에 자동으로 전달되지 않지만 필요에 따라 해석할 수 있는 별도의 변수로 프로그램에 제공됩니다. 이러한 변수를 일반적으로 argc 및 argv라고 합니다.

많은 Unix 도구(cut, head, tail, cat 등)는 STDIN 또는 명령줄의 파일을 통해 입력을 받을 수 있습니다.

따라서 echo 'some.text' | cut -d. -f2효과는 다음과 같습니다.

echo 'some.text' > temporary_file
cut -d. -f2 temporary_file
rm temporary_file

답변2

명령줄 매개변수와 프로그램 입력은 전혀 동일하지 않습니다. 그들은 같은 길을 따르지 않고 서로 다른 해석을 가지고 있습니다.

이 명령은 cut선행 인수를 -옵션으로 해석하고 다른 인수를 입력 파일 이름(다른 많은 명령과 마찬가지로)으로 해석합니다.

매개변수는 다음을 통해 프로그램에 전달됩니다.execve시스템 호출. 이것환경그 옆을 지나갔습니다. 프로그램은 메모리의 한 위치에서 매개변수를 읽을 수 있습니다. 프로그래밍 언어는 일반적으로 매개변수에 액세스하기 위한 변수나 함수를 제공합니다.C의 argv매개변수main.

표준 입력은파일 설명자0. 관례상 프로그램이 읽을 수 있도록 미리 열려 있는 파일입니다. 입력을 리디렉션하지 않고 터미널에서 명령을 실행하면 표준 입력이 터미널에서 나옵니다(즉, 입력한 내용). 리디렉션된 파일의 입력을 사용하면 mycommand <input_file표준 입력이 해당 파일에 연결됩니다. 파이프에서 명령을 실행하면 command1 | command2표준 입력이 command2표준 입력에 연결됩니다 command2.

답변3

STDIN과 프로그램 명령(매개변수 포함)은 완전히 다릅니다. STDIN은 프로그램이 읽을 수 있는 파일입니다. 터미널, 디스크 파일, 장치, 소켓 등에 연결될 수 있습니다. 프로그램 명령은 단지 문자열 집합이며, 첫 번째 문자열은 프로그램 이름입니다. 이는 프로그램 main()기능에 인수로 전달됩니다.

답변4

-d -f2명령줄 인수(예: 첫 번째 예에서는 , ) 를 참조하는 경우 'some.text'모두 관련 항목으로 이동합니다.프로그램.

명령줄 인수에는 출력이 진행되는 위치 또는 입력이 들어오는 위치를 지정하는 정보가 포함될 수도 있습니다. 예를 들어, 첫 번째 예에서 파일 이름이 있다는 것은 데이터가 파일에서 나온 것임을 의미하고, 두 번째 예에서 파일 이름이 없으면 stdin두 경우 모두 출력이 stdout.

관련 정보