シェルの変数宣言、定義、設定の違いは何ですか?
「宣言」とは、変数の識別子は存在しますが、変数の記憶領域と値は存在しないことを意味しますか?
「定義済み」とは、変数の識別子とリポジトリの両方が存在するという意味ですか?
「設定」とは、変数の値が存在するという意味ですか? (Bashマニュアルのシェル変数セクションでこれについての内容を読みました)
「定義」と「設定」はお互いを意味するので同じですか?
Bashのマニュアルのパラメータ拡張セクションでは、設定されていないか空の
${parameter:-word}
ときに操作を実行することを参照してくださいparameter
。「null」は「宣言」を意味しますが、「定義」は意味しませんか、「宣言」を意味しますが、「設定」は意味しませんか?
「未設定」とは「宣言されていない」という意味ですか?
言及された概念は関数名にも適用され、パラメータ/変数と同じ意味を持ちますか?
私が見逃した他の同様の概念は何ですか?
メモ:
POSIXシェルとBashへの答えにそれぞれ興味があります。
「変数の値が存在する」とは、変数に値が割り当てられたことを意味します。 「変数の記憶領域が存在する」とは、変数にメモリに記憶領域が割り当てられていることを意味する。
私の質問は読書から来ています。https://unix.stackexchange.com/a/56846/674Bash マニュアルの関連セクション。
答え1
- 「宣言」とは、変数タイプを使用または
declare
指定したことを意味します。typeset
これにより、変数名が配列であるか、常に整数で処理されるべきか、読み取り専用でなければならないかなどを指定できます。これはPOSIXシェルには存在せず、拡張ですbash
。 - 「定義」と「設定」は同じ意味だと思います。変数に値が割り当てられました。あなたが提起した質問は彼の言葉と全く一致しません。 POSIXシェルの仕様と
bash
マニュアルでは、変数に言及するときに「定義」という言葉を使わずに、単に次のように言います。パラメーターに指定された値がある場合(nullは有効な値です)、パラメーターが設定されます。
- 「宣言」とは、変数タイプを使用または
unset
「unset」は「set」の逆です。変数に値が割り当てられていません(または割り当てを削除するために使用されました)。このset
コマンドを使用すると、変数はリストされません。- 「null」は、変数にnull(長さ0の)文字列が値として割り当てられたことを意味します。
私はこの用語が機能に関連していないと思います。空の関数はありません(関数を定義するときに関数の本文を空にしないでください)。
${varname:-default}
関数が定義されていない場合、関数と同じくらい特別なことをする必要はありません。そのため、関数名が定義されて呼び出せるか、関数名が定義されていないために呼び出そうとするとエラーが発生します。
シェル変数には任意の長さの文字列が含まれているため、変数が宣言されたときにストレージは割り当てられません。変数が割り当てられると、ストレージスペースは動的に割り当てられます。