`declare -p`의 출력에서 ​​`--`는 무엇을 의미합니까?

`declare -p`의 출력에서 ​​`--`는 무엇을 의미합니까?
$ declare -p ar
declare -a ar='()'


$ declare -p mmm
declare -- mmm="hello"

여기서는 무엇을 의미하나요 --? 그것의 속성 중 일부를 설명합니까 mmm?

감사해요.

답변1

이는 단지 출력 형식의 일관성을 위한 것입니다. 첫 번째 필드는 text declare이고 세 번째 필드는 입니다 var=value.

따라서 특정 속성이 없는 변수의 경우 명령에는 "속성 없음"을 표시하는 방법이 필요합니다.--

예를 들어

bash-4.2$ declare y=100
bash-4.2$ declare -p y
declare -- y="100"
bash-4.2$ declare -l y
bash-4.2$ declare -p y
declare -l y="100"
bash-4.2$ declare +l y
bash-4.2$ declare -p y
declare -- y="100"

결과는 파일에 저장하고 나중에 검색할 수 있습니다.

답변2

이중 대시는 --해당 명령에 대한 옵션의 끝을 선언합니다. 당신은 매우 영리한 설명을 찾을 수 있습니다쿠엔람설명을 따르세요이 링크.

주어진 예에서는 -v다음과 같이 grep을 사용하여 값을 찾는 방법을 보여줍니다.

grep -- -v inputFile

따라서 -v--invert-match 옵션은 트리거되지 않지만 grep은 -vinputFile 내에서 문자열을 검색합니다.

답변3

--옵션의 끝을 표시합니다. 여기서는 중복됩니다(변수 이름은 다음으로 시작하지 않습니다( -사용자의 로케일이 정의된 병리학적 경우 제외).-α문자 클래스) 및 어쨌든 플래그가 있는 경우 추가되지 않지만 무해합니다. 코드에 다음이 있기 때문에 거기에 있는 것 같습니다.

printf ("declare -%s ", i ? flags : "-");

다음 명령보다 빠른 입력 속도는 무엇입니까?

if (i)
  printf ("declare -%s ", i ? flags : "-");
else
  printf ("declare ");

아이러니하게도 에서 bash-2.01코드는 다음과 같이 변경됩니다.

if (pattr == 0 || posixly_correct == 0)
  printf ("declare -%s ", i ? flags : "-");
else if (i)
  printf ("%s -%s ", this_command_name, flags);
else
  printf ("%s ", this_command_name);

을 피할 때 export및 와 함께 재사용되지만 그렇지 않습니다 .readonly--export var=valuedeclare -- var=value

관련 정보