私の目標は、「可変属性」の一般的な概念を理解することです。理解するのに役立つことを願っています。Bashで宣言された内容。
変数属性とは何ですか?なぜ変数に属性を割り当てたい人がいるのですか?変数を作成し、それを使用するときにすぐに拡張するだけでは「十分」ではなかったのはなぜですか?
ベストアンサー1
通常、変数は値が格納される場所です。変数()に値を割り当ててから、var="some value"
変数拡張を介してその値を呼び出すことができます(書き込み"$var"
は書き込みと同じ"some value"
)。
変数に値を割り当てるときや、シェルが変数にアクセスする他の状況で、変数に特別な操作を実行させることができます。変数の属性は、シェルが変数の名前と値の横に格納するコメントで、シェルにこの特別な動作を適用するように指示します。
一例
declare -i x
x
整数値のみを含める必要があることをシェルに通知します。通常、変数に値を割り当てると、シェルは等号の右側にある拡張文字列を取得し、変数値として保存します。ただし、変数に整数属性がある場合、シェルは文字列を算術式として解析し、式の評価結果を保存します。たとえば、
$ 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と解釈されます。)x
hello
その他の例
declare -l var
ステートメントにはvar
小文字のみを含める必要があります。シェルは、変数の値を保存すると、すべての大文字を小文字に変換します。declare -u var
別の方向に切り替えます。declare -r var
var
読み取り専用にしてください。これは割り当ての特別な動作でもあります。これにより、すべての後続の割り当てvar
が失敗します。declare -x var
var
環境に出力するようにしてください。この属性の場合、bash が外部コマンドを実行すると特別な動作が発生します。外部コマンドとして表示される環境には、外部コマンドの実行時にシェルからエクスポートされた変数が含まれます。