bash 스크립팅 :
이름을 지정하여 변수를 만듭니다.
abc=ok
또는 declare
declare abc=ok
를 사용할 수 있습니다.
차이점은 무엇입니까?
그리고 왜 bash는 변수를 만드는 데 여러 가지 방법을 사용합니까?
주석
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
명령 참조)를 갖습니다.
시기 함수에서 사용되는 declare
는 local
명령과 마찬가지로 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>
Answer
abc=ok
는 변수 abc
에 값을 할당합니다. declare abc
는 abc
라는 변수를 선언합니다. 둘은 declare abc=ok
로 결합 될 수 있습니다.
bash에서는 다른 쉘과 마찬가지로 문자열 및 배열 변수를 선언 할 필요가 없으므로 declare
가 필요하지 않습니다. declare -A abc
는 abc
를 연관 배열로, 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
,local
및declare
중에서 가장 호환되는 질문 다른 셸? - @ 0xc0de
export
는sh
의 모든 변형에 존재합니다.local
는 bash 및 zsh에만 있고declare
는 bash에만 있습니다.typeset
는 ksh, bash 및 zsh에 있습니다.
declare
는local
명령과 마찬가지로 NAME을 로컬로 만듭니다.-g
옵션은이 동작을 억제합니다.help declare
를 참조하십시오.declare
를 사용하면 연관 배열, 정수 및 읽기를 생성 할 수 있습니다. 변수 만. 또한 인수를 확장하므로declare $name=1
와 같은 작업이 가능합니다.