Linux Mint의 Bash 4.3 셸:
Bash 쉘은 유형이 없거나 유형이 매우 약하다는 것을 알고 있습니다. 그러나 Bash 셸을 호출하여(예: 특정 옵션 사용) 선언된 정수 변수가 잘못 사용될 때(예: 해당 정수 변수에 문자열을 저장하려고 시도하는 경우) 셸에서 런타임 오류가 발생하도록 할 수 있습니까?
샘플 코드:
declare -i age
age=23
echo "$age" # result is 23
age="hello"
echo "$age" # result is not the string hello - wish I could get an error message here!```
답변1
오류를 발생시키는 방법은 다음과 같습니다.
set -u
# or
set -o nounset
그 다음에:
$ set -u
$ declare -i age
$ age=hello
bash: hello: unbound variable
그러나 그렇다면 예상대로 항상 "작동"하는 것은 아닙니다.아니요바인딩되지 않은 변수:
$ hello=world
$ age=hello
bash: world: unbound variable
$ hello=42
$ age=hello
$ echo $age
42
$ hello=""
$ age=hello
$ echo $age
0
나는 그 가치가 거의 없다고 생각하기 시작했습니다 declare -i
. 산술 구문 없이도 산술 연산을 수행할 수 있는데, 이는 혼란을 가중시킬 뿐입니다.
답변2
아니요, 그럴 수 없습니다 bash
.declare -i
변수에 할당된 값에 대해 산술 확장을 수행하라는 뜻입니다 bash
. $((...))
변수보다는 가치에 관한 것입니다.
좋다
$ echo $(("hello"))
0
$ echo $(("hello" + 2))
2
"hello"를 할당하면
$declare -i myvar
$ myvar="hello"
$ echo $myvar
0
할당한 값이 실제 숫자인지 직접 확인할 수 있습니다. 거기이를 수행하는 방법에는 여러 가지가 있습니다..