Shell

在聲明期間為只讀 變數賦值

  • February 11, 2022

以下類型的readonly變數定義是否有效?:

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

是否允許/推薦這種類型的聲明與賦值相結合?

您可以使用只讀變數ab初始化只讀變數,c就像您在問題中顯示的那樣。

一般來說,你會想要使用

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

即引用擴展。如果變數IFS的值包含 digit 2,則它可能會導致 中的空值c。該值將為空,因為 shell 會將參數拆分為readonlyon 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='

請注意,並非所有 shell 都這樣工作:

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

引用自:https://unix.stackexchange.com/questions/668773