다음 유형의 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