Linux 명령줄 인수 변형

Linux 명령줄 인수 변형

Linux를 처음 접하고 명령줄 인수에 대한 몇 가지 질문이 있습니다.

widget이라는 인수를 사용하는 이라는 명령줄 도구가 있다고 가정해 보겠습니다 fizz. 나는 다양한 유형의 주장을 모두 보았습니다.

widget -fizz
widget --fizz
widget \fizz
widget -f

이것들이 사용되는 방식의 차이점은 무엇입니까? 명령줄 도구가 이를 다르게 결정하는 방법을 결정합니까, 아니면 Linux가 모두 동일한 의미를 알고 있지만 응용 프로그램에 다르게 제공합니까?

widget(이미 존재하는) 도구에 인수 를 전달하는 방식을 사용자 정의할 수 있습니까 fizz?

widget #f#

미리 감사드립니다!

답변1

이것들이 사용되는 방식의 차이점은 무엇입니까?

그것은 전적으로 프로그램에 달려 있습니다. 왜냐면...

명령줄 도구가 이를 다르게 결정하는 방법을 결정합니까, 아니면 Linux가 모두 동일한 의미를 알고 있지만 응용 프로그램에 다르게 제공합니까?

...프로세스에 대한 인수는 개별 문자열의 배열로 제공됩니다.

여기에는 두 가지가 관련됩니다. 하나는 입력한 입력을 구문 분석하고 프로세스를 실행하는 셸입니다. 예를 들어 문자열을 공백으로 분할하여 에 전달합니다 widget. 예를 들어 해당 작업을 처리하는 방법에 대한 자세한 내용은 및를 man sh참조 하세요.man bash

그러나 궁극적으로 widget인수를 얻 -fizz거나 --fizz작성된 그대로 문자열로 가져옵니다. 그것으로 무엇을 할지 결정합니다.

몇 가지 표준이 있습니다. 에 대한 인수를 처리하는 의 변형이 많이 getopts있으며 popt어느 widget정도 "표준" 동작을 가지고 있습니다.

하지만 저자가 widget자신만의 표준을 고안하는 것을 막을 수 있는 것은 없습니다.

따라서 마지막으로, 소스 코드의 작성자이거나 소스 코드를 수정하는 경우 이를 인수 로 widget처리하도록 할 수 있습니다 . 하지만 프로그램을 변경하지 않고는 할 수 없습니다.#f#fizz

답변2

명령줄 도구가 이를 다르게 결정하는 방법을 결정합니까, 아니면 Linux가 모두 동일한 의미를 알고 있지만 응용 프로그램에 다르게 제공합니까?

인수를 평가하는 것은 실행 파일 또는 함수의 작업입니다. 쉘(Linux가 아니라 bash, csh등)은 이러한 인수를 전혀 방해하지 않습니다.

이는 귀하의 경우 모든 주장이 다르게 처리된다는 것을 의미합니다. 그러나 쉘은 다음을 수행합니다.확장또는대체품명령이 인수를 가져오기 전에. 예를 들어 두 개의 JPG 이미지가 있는 폴더가 있고 다음과 같이 작성합니다.

ls *.jpg

그런 다음 셸은 *.jpg으로 확장되므로 다음 인수가 전달 image1.jpg image2.jpg됩니다 .ls

ls image1.jpg image2.jpg

그 외에는 소스 코드를 다시 작성하는 것 외에 이미 컴파일되거나 실행 파일에 작성된 것 이외의 다른 인수를 사용하도록 스크립트를 수정할 수 없습니다.

다음 질문도 확인해 보세요.

명령 프롬프트 매개변수의 대시 1개와 대시 2개의 차이점은 무엇입니까?

답변3

우선, \Linux에서 시작하는 인수는 거의 볼 수 없습니다. 왜냐하면 대부분의 쉘에서 이것은 공백을 이스케이프 처리하는 데 사용되는 이스케이프 문자이고 쉘에 의미가 있는 기타 문자( $, "", ()등)이기 때문입니다.

Linux 셸(대부분의 배포판에서는 Bash)은 공백으로 구분된 각 인수를 문자열로 프로세스에 전달합니다. 프로세스가 이를 처리하기로 결정하는 것은 프로그래머의 선택입니다.

일반적으로 -접두사는 짧은 옵션(예: -h)을 나타내고, 는 --더 긴 버전(예: --help)을 나타냅니다. 이는 초기 Unix 도구에서 상속된 대부분의 Linux 프로그램이 사용하는 POSIX 표준의 일부입니다. 참조getopt자세한 내용은 Wikipedia의 기사를 참조하세요.

마지막 질문에 대해서는 아니요. 소스 코드를 수정하지 않는 한 도구가 이러한 인수를 해석하는 방식을 수정할 수 없습니다 widget.

일부 Unix 시스템에는 다음과 같은 멋진 유틸리티가 있습니다.파그이를 통해 프로세스에 전달된 모든 인수를 볼 수 있습니다. Linux에서는 다음을 사용하여 이를 복제할 수 있습니다.

ps eww -p 12345

여기서 12345는 프로세스 식별자(PID)입니다. 보다이 답변대안을 위해.

관련 정보