Bashスクリプトの宣言と一般変数の違いは何ですか?

Bashスクリプトの宣言と一般変数の違いは何ですか?

Bashスクリプトでは:

変数名を指定して変数を作成します。

abc=ok

または私達は利用できますdeclare

declare abc=ok

違いは何ですか?

Bashにはなぜ変数を生成する方法がたくさんありますか?

答え1

からhelp -m declare

名前

    declare- 変数の値と属性を設定します。

要約

    declare[-aAfFgilnrtux][-p][name[ ] ...]=value

説明する

    変数の値と属性を設定します。

    変数を宣言し、属性を割り当てます。名前を指定しないと、すべての変数の属性と値が表示されます。

    オプション:

      -f
        動作または表示を関数名と定義に制限する
      -F
        関数名のみを表示するように制限します(デバッグ時に行番号とソースファイルを含む)。
      -g
        シェル関数で使用されたときにグローバル変数を生成します。それ以外の場合は無視されます。
      -p
        各NAMEの属性と値を表示

    プロパティ設定オプション:

      -a
        NAMEをインデックス配列にする(サポートされている場合)
      -A
        NAMEを連想配列にする(サポートされている場合)
      -i
        NAMEに「整数」属性を持つように設定
      -l
        割り当て時にNAMEを小文字に変換
      -n
        NAME を値の名前付き変数への参照にします。
      -r
        NAMEを読み取り専用に設定
      -t
        NAMEに「trace」属性を持つように設定
      -u
        割り当て時にNAMEを大文字に変換
      -x
        名前のエクスポート

    使用+「変える」-' 指定された属性をオフにします。

    整数属性を持つ変数は、let変数に値を割り当てるときに算術評価を行います(コマンドを参照)。

    関数内で使用するときにコマンドをdeclare使用するのと同じように、NAMEをローカル名にします。localこれ-g'オプションはこの動作を抑制します。

    終了ステータス:
    無効なオプションが指定された場合、または変数割り当てエラーが発生しない限り成功を返します。

また、見ることができます

    大きな打撃(1)

実装する

    GNU bash, バージョン 4.3.11(1)-リリース (i686-pc-linux-gnu)
    著作権 (C) 2013 Free Software Foundation, Inc.
    ライセンス GPLv3+: GNU GPL バージョン 3 以降 <http:// gnu.org/ ライセンス/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操作は、関数とスクリプトのループに役立ちます。

また、訪問入力変数:宣言または組版

答え2

abc=ok変数に値を割り当てますabcdeclare abcという変数を宣言しますabc。 2つはにまとめることができますdeclare abc=ok

Bashでは、他のシェルと同様に文字列変数と配列変数を宣言する必要がないため、declare連想配列の作成や変数を読み取り専用にするなどのオプションを渡す必要がない限り、必要ありません。しかし、関数の内部には違いがあります。つまり、変数を関数に対してローカルにします。つまり、関数の外側の変数値(存在する場合)が保存されることを意味します。 (これは、ユーザーが使用しない限り、変数をローカルではないものにします。これは、関数でグローバル連想配列を作成するなどの他のオプションと組み合わせる場合に便利です。)例:declare -A abcabcdeclare -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

組み込み関数を使用して実行できるもう1つのタスクはdeclare次のとおりです。

このdeclare組み込み機能はbashに固有です。これは、互換性の同義語typesetとして提供されているkshとbashの組み込み機能に大きく影響されており、それに非常に近いです。 (bashがなぜ直接呼び出さないのかわかりません)。 3番目の同様のものがあり、それ以外は同じですが、機能内でのみ機能します。そしてもう一度互換性のために(すべてのBourneスタイルのシェルとの)。typesetdeclaretypesetlocalexportdeclare -x

関連情報