次の型の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