쉘에서 변수 선언, 정의 및 설정의 차이점은 무엇입니까?
"선언"은 변수의 식별자는 존재하지만 변수의 저장 공간과 값은 존재하지 않음을 의미합니까?
"정의됨"은 변수의 식별자와 저장소가 모두 존재한다는 의미입니까?
"설정"은 변수의 값이 존재한다는 의미인가요? (Bash 매뉴얼의 쉘 변수 섹션에서 이에 대한 내용을 읽었습니다)
"정의"와 "설정"은 서로를 의미하므로 동일합니까?
Bash 매뉴얼의 매개변수 확장 섹션에서는 설정되지 않거나 비어 있을
${parameter:-word}
때 작업을 수행하는 것을 언급합니다parameter
."null"은 "선언"을 의미하지만 "정의"는 의미하지 않거나, "선언"을 의미하지만 "설정"은 의미하지 않습니까?
"설정되지 않음"은 "선언되지 않음"을 의미합니까?
언급된 개념은 함수 이름에도 적용되며 매개변수/변수와 동일한 의미를 갖습니까?
내가 놓친 다른 유사한 개념은 무엇입니까?
노트:
POSIX 쉘과 Bash에 대한 답변에 각각 관심이 있습니다.
"변수의 값이 존재합니다"는 변수에 값이 할당되었음을 의미합니다. "변수의 저장 공간이 존재합니다"는 변수에 메모리에 저장 공간이 할당되어 있음을 의미합니다.
내 질문은 독서에서 비롯됩니다.https://unix.stackexchange.com/a/56846/674Bash 매뉴얼의 관련 섹션.
답변1
- "선언"은 변수 유형을 사용
declare
하거나 지정 했음을 의미합니다 .typeset
이를 통해 변수 이름이 배열인지, 항상 정수로 처리되어야 하는지, 읽기 전용이어야 하는지 등을 지정할 수 있습니다. 이는 POSIX 셸에는 존재하지 않으며 확장입니다bash
. - "정의"와 "설정"은 같은 의미라고 생각합니다. 변수에 값이 할당되었습니다. 당신이 제기한 질문은 그의 말과 전혀 일치하지 않습니다. POSIX 쉘 사양과
bash
매뉴얼에서는 변수를 언급할 때 "정의"라는 단어를 사용하지 않고 간단히 다음과 같이 말합니다.매개변수에 지정된 값이 있는 경우(null은 유효한 값임) 매개변수가 설정됩니다.
- "선언"은 변수 유형을 사용
unset
"unset"은 "set"의 반대입니다. 변수에 값이 할당되지 않습니다(또는 할당을 제거하는 데 사용했습니다 ). 이set
명령을 사용하면 변수가 나열되지 않습니다.- "null"은 변수에 null(길이가 0인) 문자열이 값으로 할당되었음을 의미합니다.
나는 이 용어가 기능과 관련이 없다고 생각합니다. 빈 함수란 없습니다(함수를 정의할 때 함수 본문을 비워두면 안 됩니다).
${varname:-default}
함수가 정의되지 않은 경우 함수만큼 특별한 작업을 수행해야 하는 것은 없습니다. 따라서 함수 이름이 정의되어 호출할 수 있거나, 함수 이름이 정의되지 않아 호출하려고 하면 오류가 발생합니다.
쉘 변수에는 임의 길이의 문자열이 포함되어 있으므로 변수가 선언될 때 저장소가 할당되지 않습니다. 변수가 할당될 때 저장 공간은 동적으로 할당됩니다.