🤡

readonly と declare -r の違い

2022/01/26に公開

スコープの対象範囲が異なる

readonly グローバルスコープ
declare -r ローカルスコープ
declare -rg グローバルスコープ

readonly zzz='グローバルreadonly'
declare -r xxx='グローバルdeclare -r'

function test () {
  declare -r aaa='declare -r'
  readonly bbb='readonly'
  declare -rg ccc='declare -rg'
}
test

echo "zzz=${zzz}"
echo "xxx=${xxx}"
echo "aaa=${aaa}"
echo "bbb=${bbb}"
echo "ccc=${bbb}"

-----
// 以下出力
// zzz=グローバルreadonly
// xxx=グローバルdeclare -r
// aaa=
// bbb=readonly
// ccc=declare -rg

※上記${xxx}readonly又はdeclare -rg と同じ。

macOSのbashではdeclare -gは利用不可らしい。

Discussion