선언 중에 읽기 전용 변수에 값 할당

선언 중에 읽기 전용 변수에 값 할당

다음 유형의 readonly변수 정의가 유효합니까? :

#!/bin/sh
readonly a=1
readonly b=1
readonly c=$((a+b))

이러한 유형의 선언이 할당과 결합되어 허용/권장됩니까?

답변1

질문에 표시된 대로 읽기 전용 변수를 사용 a하고 b읽기 전용 변수를 초기화할 수 있습니다.c

일반적으로 말해서, 당신은

readonly c="$(( a + b ))"

즉, 견적 확장입니다. 변수 IFS값에 숫자가 포함되어 있으면 2에서 null 값이 발생할 수 있습니다 c. 쉘이 명령을 생성하기 위해 인수를 분할 readonly하므로 이 값은 비어 있습니다.2

readonly c=

처형되고 있습니다.

예:

$ cat script
#! /bin/sh

IFS=2
readonly a=1
readonly b=1
readonly c=$((a+b))
$ yash -o posixly-correct -x script
+ IFS=2
+ readonly 'a=1'
+ readonly 'b=1'
+ readonly 'c='

모든 쉘이 이런 방식으로 작동하는 것은 아닙니다.

$ bash --posix -x script
+ IFS=2
+ readonly a=1
+ a=1
+ readonly b=1
+ b=1
+ readonly c=2
+ c=2

답변2

나는 갖고 싶어끊임없는=읽기 전용 변수내 쉘 스크립트에서.

즉, 나는 그들과 많은 어려움을 겪었습니다.


대체 솔루션(견적)

나는 문제를 매우 잘 설명하기 때문에 지금 여기서 답변에 투표하고 있습니다.

그러나 나는 이 문제에 다른 방식으로 접근합니다. 먼저, 값을 할당합니다.정상변수를 선택한 다음 읽기 전용으로 표시합니다. 예:

#!/bin/sh

# first, we create a variable and assign it a value
my_var=first_assign

# after that, we mark the variable as read-only
readonly my_var

# any further assignment attempt will be met with an error
my_var=any_further_assign

오류 메시지는 셸마다 약간씩 다를 수 있습니다. 예를 들면 다음과 같습니다.

  • dash:

    readonly_assignment: 10: my_var: is read only
    
  • bash:

    readonly_assignment: line 10: my_var: readonly variable
    
  • zsh:

    readonly_assignment:10: read-only variable: my_var
    

관련 정보