web-dev-qa-db-ja.com

bashでローカルの読み取り専用変数を作成するにはどうすればよいですか?

Bashでlocal変数とdeclare -r(読み取り専用)変数の両方を作成するにはどうすればよいですか?

私が行った場合:

function x {
    declare -r var=val
}

次に、読み取り専用のグローバルvarを取得します。

私が行った場合:

function x {
    local var=val
}

私が行った場合:

function x {
    local var=val
    declare -r var
}

次に、再びグローバルを取得します(他の関数からvarにアクセスできます)。

Bashでローカルと読み取り専用の両方を組み合わせる方法は?

17
bodacydo

help localはBashでそれについて言及していませんが.xlocaldeclareと同じオプションを受け入れることができます(少なくともBash 4.3.30の時点で、このドキュメントの監視は修正されています) 。

したがって、次のことを簡単に行うことができます。

local -r var=val

とはいえ、declare関数内は、@ ruakhがコメントで述べているように、デフォルトではlocalと同じように動作するため、最初の試行でもlocal読み取りの作成に成功するはずです。 -変数のみ。

Bash 4.2以降では、declare-gオプションを使用してoverrideこれを実行し、関数内からでもグローバル変数を作成できます(Bash3.xはnotをサポートします)この。)


ありがとう、 テイラーエドミストン

help declareは、bothdeclareおよびlocalによってサポートされるすべてのオプションを示しています。

31
mklement0