-a- NAMEをインデックス配列にする(サポートされている場合)

-a- NAMEをインデックス配列にする(サポートされている場合)

私の目標は、「可変属性」の一般的な概念を理解することです。理解するのに役立つことを願っています。Bashで宣言された内容

変数属性とは何ですか?なぜ変数に属性を割り当てたい人がいるのですか?変数を作成し、それを使用するときにすぐに拡張するだけでは「十分」ではなかったのはなぜですか?

ベストアンサー1

通常、変数は値が格納される場所です。変数()に値を割り当ててから、var="some value"変数拡張を介してその値を呼び出すことができます(書き込み"$var"は書き込みと同じ"some value")。

変数に値を割り当てるときや、シェルが変数にアクセスする他の状況で、変数に特別な操作を実行させることができます。変数の属性は、シェルが変数の名前と値の横に格納するコメントで、シェルにこの特別な動作を適用するように指示します。

一例

declare -i xx整数値のみを含める必要があることをシェルに通知します。通常、変数に値を割り当てると、シェルは等号の右側にある拡張文字列を取得し、変数値として保存します。ただし、変数に整数属性がある場合、シェルは文字列を算術式として解析し、式の評価結果を保存します。たとえば、

$ x=2+2; echo $x
2+2
$ declare -i x; x=2+2; echo $x
4
$ declare -i x; x=2+hello; echo $x
2
$ declare -i x; x=2+
bash: 2+: syntax error: operand expected (error token is "+")

(3行目は未定義の変数名なので2にx=2+hello設定されており、未設定の変数はデフォルトで0と解釈されます。)xhello

その他の例

  • declare -l varステートメントにはvar小文字のみを含める必要があります。シェルは、変数の値を保存すると、すべての大文字を小文字に変換します。
  • declare -u var別の方向に切り替えます。
  • declare -r varvar読み取り専用にしてください。これは割り当ての特別な動作でもあります。これにより、すべての後続の割り当てvarが失敗します。
  • declare -x varvar環境に出力するようにしてください。この属性の場合、bash が外部コマンドを実行すると特別な動作が発生します。外部コマンドとして表示される環境には、外部コマンドの実行時にシェルからエクスポートされた変数が含まれます。

おすすめ記事