回答:
からhelp -m declare
:
名前
declare
-変数の値と属性を設定します。あらすじ
declare
[-aAfFgilnrtux
] [-p
] [name
[ ] ...]=value
説明
変数の値と属性を設定します。
変数を宣言し、それらに属性を与えます。NAMEが指定されていない場合、すべての変数の属性と値を表示します。
オプション:
-f
アクションまたは表示を関数名と定義に制限する
-F
表示を関数名のみに制限します(デバッグ時に行番号とソースファイルに加えて)
-g
シェル関数で使用される場合、グローバル変数を作成します。それ以外の場合は無視されます
-p
各NAMEの属性と値を表示する
属性を設定するオプション:
-a
NAMEにインデックス付き配列を作成する(サポートされている場合)
-A
NAMEを連想配列にする(サポートされている場合)
-i
NAMEに「整数」属性を持たせるため
-l
NAMEを割り当て時に小文字に変換する
-n
NAMEをその値で指定された変数への参照にします
-r
NAMEを読み取り専用にする
-t
NAMEに「トレース」属性を持たせるため
-u
NAMEを割り当て時に大文字に変換する
-x
NAMEをエクスポートするには
'
+
'の代わりに '-
' を使用すると、指定された属性がオフになります。整数属性を持つ
let
変数には、変数に値が割り当てられたときに算術評価(コマンドを参照)が実行されます。関数で使用する場合
declare
、local
コマンドと同様に、NAMEをローカルにします。'-g
'オプションは、この動作を抑制します。終了ステータス:
無効なオプションが指定されるか、変数割り当てエラーが発生しない限り、成功を返します。参照
bash(1)
実装
GNU bash、バージョン4.3.11(1)-release(i686-pc-linux-gnu)
Copyright(C)2013 Free Software Foundation、Inc.
ライセンスGPLv3 +:GNU GPLバージョン3以降<http://gnu.org/ licenses / gpl.html>
そのため、declare
変数値と属性の設定に使用されます。
非常に簡単な例で、2つの属性の使用を示しましょう。
$ # First Example:
$ declare -r abc=ok
$ echo $abc
ok
$ abc=not-ok
bash: abc: readonly variable
$ # Second Example:
$ declare -i x=10
$ echo $x
10
$ x=ok
$ echo $x
0
$ x=15
$ echo $x
15
$ x=15+5
$ echo $x
20
上記の例から、declare
通常の変数に対する変数の使用法を理解する必要があると思います!このタイプのdeclare
関数は、関数、スクリプトを使用したループで役立ちます。
タイピング変数もご覧ください:declareまたはtypeset
abc=ok
変数に値を割り当てますabc
。declare abc
という変数を宣言しますabc
。2つはとして組み合わせることができますdeclare abc=ok
。
bashでは、他のシェルと同様に、文字列変数と配列変数を宣言する必要はありません。したがってdeclare
、たとえば連想配列を作成したり、変数を読み取り専用にしたりdeclare -A abc
するオプションを渡す場合を除き、必要ありません。ただし、関数内では違いがあります。変数が関数に対してローカルになります。つまり、関数外の変数の値(存在する場合)が保持されます。(変数をローカルにしないを使用しない限り、これは他のオプションと組み合わせた場合に便利です。たとえば、関数内にグローバル連想配列を作成する場合などです。)例:abc
declare -r
declare
declare -g
declare -gA
f () {
declare a
a='a in f'
b='b in f'
echo "From f: a is $a"
echo "From f: b is $b"
}
a='Initial a'
b='Initial b'
f
echo "After f: a is $a"
echo "After f: b is $b"
出力:
From f: a is a in f
From f: b is b in f
After f: a is Initial a
After f: b is b in f
あなたがdeclare
組み込みでできるもう一つのことは
declare
組み込みは、bashのに固有のものです。それは強く刺激され、kshのtypeset
組み込みに非常に近く、bashは互換性のtypeset
同義語として提供されdeclare
ます。(bashが単にそれを呼び出さなかった理由がわかりませんtypeset
)。3番目の同義語がありlocal
ます。また、互換性のためにexport
、と同じdeclare -x
です(すべてのBourneスタイルのシェルと)。
export
、local
およびdeclare
他のシェルと最も互換性がありますか?
export
は、のすべてのバリアントに存在しますsh
。local
bashとzshにdeclare
のみ存在し、bashにのみ存在します。typeset
ksh、bash、zshに存在します。
declare
、local
コマンドと同様に、NAMEをローカルにします。-g
オプションは、この動作を抑制することができます。をご覧くださいhelp declare
。