Shell
在聲明期間為只讀 變數賦值
以下類型的
readonly
變數定義是否有效?:#!/bin/sh readonly a=1 readonly b=1 readonly c=$((a+b))
是否允許/推薦這種類型的聲明與賦值相結合?
您可以使用只讀變數
a
並b
初始化只讀變數,c
就像您在問題中顯示的那樣。一般來說,你會想要使用
readonly c="$(( a + b ))"
即引用擴展。如果變數
IFS
的值包含 digit2
,則它可能會導致 中的空值c
。該值將為空,因為 shell 會將參數拆分為readonly
on2
,從而導致命令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='
請注意,並非所有 shell 都這樣工作:
$ bash --posix -x script + IFS=2 + readonly a=1 + a=1 + readonly b=1 + b=1 + readonly c=2 + c=2