回答:
からhelp -m declare:
名前
declare-変数の値と属性を設定します。あらすじ
declare[-aAfFgilnrtux] [-p] [name[ ] ...]=value説明
変数の値と属性を設定します。
変数を宣言し、それらに属性を与えます。NAMEが指定されていない場合、すべての変数の属性と値を表示します。
オプション:
-fアクションまたは表示を関数名と定義に制限する
-F表示を関数名のみに制限します(デバッグ時に行番号とソースファイルに加えて)
-gシェル関数で使用される場合、グローバル変数を作成します。それ以外の場合は無視されます
-p各NAMEの属性と値を表示する
属性を設定するオプション:
-aNAMEにインデックス付き配列を作成する(サポートされている場合)
-ANAMEを連想配列にする(サポートされている場合)
-iNAMEに「整数」属性を持たせるため
-lNAMEを割り当て時に小文字に変換する
-nNAMEをその値で指定された変数への参照にします
-rNAMEを読み取り専用にする
-tNAMEに「トレース」属性を持たせるため
-uNAMEを割り当て時に大文字に変換する
-xNAMEをエクスポートするには
'
+'の代わりに '-' を使用すると、指定された属性がオフになります。整数属性を持つ
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するオプションを渡す場合を除き、必要ありません。ただし、関数内では違いがあります。変数が関数に対してローカルになります。つまり、関数外の変数の値(存在する場合)が保持されます。(変数をローカルにしないを使用しない限り、これは他のオプションと組み合わせた場合に便利です。たとえば、関数内にグローバル連想配列を作成する場合などです。)例:abcdeclare -rdeclaredeclare -gdeclare -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。localbashとzshにdeclareのみ存在し、bashにのみ存在します。typesetksh、bash、zshに存在します。
declare、localコマンドと同様に、NAMEをローカルにします。-gオプションは、この動作を抑制することができます。をご覧くださいhelp declare。