Bash 스크립팅에서 ' 선언과 일반 변수의 차이점은 무엇입니까?

bash 스크립팅 :

이름을 지정하여 변수를 만듭니다.

abc=ok 

또는 declare

declare abc=ok 

를 사용할 수 있습니다.

차이점은 무엇입니까?

그리고 왜 bash는 변수를 만드는 데 여러 가지 방법을 사용합니까?

주석

  • 함수에서 사용할 때 declarelocal 명령과 마찬가지로 NAME을 로컬로 만듭니다. -g 옵션은이 동작을 억제합니다. help declare를 참조하십시오.
  • declare를 사용하면 연관 배열, 정수 및 읽기를 생성 할 수 있습니다. 변수 만. 또한 인수를 확장하므로 declare $name=1와 같은 작업이 가능합니다.

Answer

help -m declare :

이름

    declare -변수 값 및 속성을 설정합니다.

시놉시스

    declare [ -aAfFgilnrtux ] [ -p ] [ name [=value] …]

DESCRIPTION

    변수 값 및 속성을 설정합니다.

    변수 선언 그들에게 속성을 부여하십시오. NAME이 제공되지 않으면 모든 변수의 속성과 값을 표시합니다.

    옵션 :

      -f

        작업 또는 표시를 함수 이름 및 정의로 제한

      -F

        표시를 함수 이름으로 만 제한 (디버깅시 줄 번호 및 소스 파일 포함)

      -g

        셸 함수에서 사용될 때 전역 변수를 만듭니다. 그렇지 않으면 무시 됨

      -p

        속성 및 값 표시 각 이름의

    속성을 설정하는 옵션 :

      -a

        -NAME 색인 배열 만들기 (지원되는 경우)

      -A

        -NAME을 연관 배열로 만들기 (지원되는 경우)

      -i

        NAME에 정수속성을 갖도록 만들기

      -l

        -할당시 NAME을 소문자로 변환

      -n

        NAME을 값으로 명명 된 변수에 대한 참조로 만듭니다.

      -r

        : NAME을 다시 만들기 adonly

      -t

        을 사용하여 NAME에 trace 속성

      -u

        을 사용하여 NAME을 할당시 대문자

      -x

        을 사용하여 NAME 만들기 내보내기

    +

- 대신

가 주어진 속성을 끕니다. .

정수 속성이있는 변수는 변수에 값이 할당 될 때 수행되는 산술 평가 (let 명령 참조)를 갖습니다.

시기 함수에서 사용되는 declarelocal 명령과 마찬가지로 NAME을 로컬로 만듭니다. -g 옵션은이 동작을 억제합니다.

종료 상태 :
유효하지 않은 옵션이 제공되거나 변수 할당 오류가 발생하지 않는 한 성공을 반환합니다.

도 참조

    bash (1)

구현

    GNU bash, 버전 4.3.11 (1) -release (i686-pc-linux-gnu)
    Copyright (C) 2013 Free Software Foundation, Inc.
    License GPLv3 + : GNU GPL version 3 이상 < http : // gnu.org/licenses/gpl.html >


그러므로 declare는 변수 값 및 속성 을 설정하는 데 사용됩니다.

두 가지 사용을 보여 드리겠습니다. 아주 간단한 예가있는 속성 :

$ # First Example: $ declare -r abc=ok $ echo $abc ok $ abc=not-ok bash: abc: readonly variable $ # Second Example: $ declare -i x=10 $ echo $x 10 $ x=ok $ echo $x 0 $ x=15 $ echo $x 15 $ x=15+5 $ echo $x 20 

위의 예에서 declare 변수가 일반 변수보다 높습니다! 이러한 유형의 declare ation은 함수, 스크립팅 루프에서 유용합니다.

또한 입력 변수 : 선언 또는 조판

댓글

  • 예, " 및 속성 "가 핵심입니다! 이것이 차이입니다.
  • 좋습니다! 저는 예를 들어 가르치고 배우는 가장 좋은 방법을 좋아합니다. 감사합니다!
  • 이 답변을 이해하려면 " 속성 "이 무엇인지 알아야합니다. ' ' integer ', 배열 ' 또는 ' 읽기 전용 '.

li>

  • 이것은 선언을 잘 설명하지만 bash를 통해 단순히 변수를 선언 할 때 일어나는 일을 완전히 무시합니다.
  • Answer

    abc=ok는 변수 abc에 값을 할당합니다. declare abcabc라는 변수를 선언합니다. 둘은 declare abc=ok로 결합 될 수 있습니다.

    bash에서는 다른 쉘과 마찬가지로 문자열 및 배열 변수를 선언 할 필요가 없으므로 declare가 필요하지 않습니다. declare -A abcabc를 연관 배열로, declare -r는 변수를 읽기 전용으로 만듭니다. 그러나 함수 내에서 declare는 차이를 만듭니다. 이는 변수가 함수에 국한되도록합니다. 즉, 함수 외부의 변수 값 (있는 경우)이 유지됨을 의미합니다. . (변수를 로컬이 아닌 declare -g를 사용하지 않는 한, 이는 다른 옵션과 결합 할 때 유용합니다 (예 : declare -gA) 함수의 연관 배열) 예 :

    f () { declare a a="a in f" b="b in f" echo "From f: a is $a" echo "From f: b is $b" } a="Initial a" b="Initial b" f echo "After f: a is $a" echo "After f: b is $b" 

    출력 :

    From f: a is a in f From f: b is b in f After f: a is Initial a After f: b is b in f 

    다른 declare 내장 기능으로 수행 할 수있는 작업은

    declare 내장 기능이 bash에 고유하다는 것입니다. 강력한 영감을 받았으며 ksh “의 typeset 내장 기능에 매우 가깝고 bash는 iv id =”의 동의어로 typeset를 제공합니다. 4b845a718e “>

    호환성을 확인하세요. (왜 bash가 typeset라고 부르지 않았는지 모르겠습니다.) 세 번째 동의어 인 local가 있습니다. export도 있습니다. declare -x, 다시 호환성을 위해 (모든 Bourne 스타일 셸과).

    댓글

    • 예! ' 및 옵션 '이 포인트입니다. 추신. bash를 디자인하면 " declare "의 동작이 다른 조건에서 어떤 작업을 수행하도록 할 것입니다. 이렇게하면 작업이 간단 해집니다.
    • 좋은 답변입니다. 추가 질문 : export, localdeclare 중에서 가장 호환되는 질문 다른 셸?
    • @ 0xc0de exportsh의 모든 변형에 존재합니다. local는 bash 및 zsh에만 있고 declare는 bash에만 있습니다. typeset는 ksh, bash 및 zsh에 있습니다.

    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다