선언, 정의 및 설정의 차이점

선언, 정의 및 설정의 차이점
  1. 쉘에서 변수 선언, 정의 및 설정의 차이점은 무엇입니까?

    • "선언"은 변수의 식별자는 존재하지만 변수의 저장 공간과 값은 존재하지 않음을 의미합니까?

    • "정의됨"은 변수의 식별자와 저장소가 모두 존재한다는 의미입니까?

    • "설정"은 변수의 값이 존재한다는 의미인가요? (Bash 매뉴얼의 쉘 변수 섹션에서 이에 대한 내용을 읽었습니다)

    • "정의"와 "설정"은 서로를 의미하므로 동일합니까?

  2. Bash 매뉴얼의 매개변수 확장 섹션에서는 설정되지 않거나 비어 있을 ${parameter:-word}때 작업을 수행하는 것을 언급합니다 parameter.

    • "null"은 "선언"을 의미하지만 "정의"는 의미하지 않거나, "선언"을 의미하지만 "설정"은 의미하지 않습니까?

    • "설정되지 않음"은 "선언되지 않음"을 의미합니까?

  3. 언급된 개념은 함수 이름에도 적용되며 매개변수/변수와 동일한 의미를 갖습니까?

  4. 내가 놓친 다른 유사한 개념은 무엇입니까?

노트:

  • POSIX 쉘과 Bash에 대한 답변에 각각 관심이 있습니다.

  • "변수의 값이 존재합니다"는 변수에 값이 할당되었음을 의미합니다. "변수의 저장 공간이 존재합니다"는 변수에 메모리에 저장 공간이 할당되어 있음을 의미합니다.

  • 내 질문은 독서에서 비롯됩니다.https://unix.stackexchange.com/a/56846/674Bash 매뉴얼의 관련 섹션.

답변1

    • "선언"은 변수 유형을 사용 declare하거나 지정 했음을 의미합니다 . typeset이를 통해 변수 이름이 배열인지, 항상 정수로 처리되어야 하는지, 읽기 전용이어야 하는지 등을 지정할 수 있습니다. 이는 POSIX 셸에는 존재하지 않으며 확장입니다 bash.
    • "정의"와 "설정"은 같은 의미라고 생각합니다. 변수에 값이 할당되었습니다. 당신이 제기한 질문은 그의 말과 전혀 일치하지 않습니다. POSIX 쉘 사양과 bash매뉴얼에서는 변수를 언급할 때 "정의"라는 단어를 사용하지 않고 간단히 다음과 같이 말합니다.

      매개변수에 지정된 값이 있는 경우(null은 유효한 값임) 매개변수가 설정됩니다.

    • unset"unset"은 "set"의 반대입니다. 변수에 값이 할당되지 않습니다(또는 할당을 제거하는 데 사용했습니다 ). 이 set명령을 사용하면 변수가 나열되지 않습니다.
    • "null"은 변수에 null(길이가 0인) 문자열이 값으로 할당되었음을 의미합니다.
  1. 나는 이 용어가 기능과 관련이 없다고 생각합니다. 빈 함수란 없습니다(함수를 정의할 때 함수 본문을 비워두면 안 됩니다). ${varname:-default}함수가 정의되지 않은 경우 함수만큼 특별한 작업을 수행해야 하는 것은 없습니다. 따라서 함수 이름이 정의되어 호출할 수 있거나, 함수 이름이 정의되지 않아 호출하려고 하면 오류가 발생합니다.

쉘 변수에는 임의 길이의 문자열이 포함되어 있으므로 변수가 선언될 때 저장소가 할당되지 않습니다. 변수가 할당될 때 저장 공간은 동적으로 할당됩니다.

관련 정보