宣言中に読み取り専用変数に値を割り当てる

宣言中に読み取り専用変数に値を割り当てる

次の型のreadonly変数定義は有効ですか? :

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

このタイプの宣言は割り当てと組み合わせて許可/推奨されますか?

ベストアンサー1

質問に示すように、読み取り専用変数を使用してa読み取りb専用変数を初期化できます。c

一般的に言えば、あなたは

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

つまり、見積もり拡張です。変数のIFS値に数値が含まれていると、2null値が発生する可能性があります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

おすすめ記事