정수 변수가 잘못 사용되면(변수에 문자열을 저장하려고 시도하여) Bash 쉘에서 런타임 오류가 발생할 수 있습니까?

정수 변수가 잘못 사용되면(변수에 문자열을 저장하려고 시도하여) Bash 쉘에서 런타임 오류가 발생할 수 있습니까?

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

할당한 값이 실제 숫자인지 직접 확인할 수 있습니다. 거기이를 수행하는 방법에는 여러 가지가 있습니다..

관련 정보