シェルプログラミングにおける変数置換とは何か

シェルプログラミングにおける変数置換とは何か

この質問は非常に基本的なもので、私自身だけでなく、この用語を見た他の新参者にも尋ねています。変数置換そして、次のような考えを持っています。

私の理解する限りでは、変数置換「変数の値を別の変数に置き換える」と説明していますが、これが正しいかどうかは疑問です。
このアクションには、単に「テキスト エディターで手動で編集して変数の値を変更する」と言うのではなく、なぜ特別な用語が必要なのか疑問に思いました。

とは変数置換シェル プログラミングにおける概念について教えてください。答えがわかっている場合は、仕事でどのような種類のアクションを使用するかについての実用的な例を挙げてください。

答え1

特定の変数の値を別の変数に代入します。

この説明はいくつかの点で間違っています。変数置換は名前変数(およびいくつかの構文上の余計なもの)の価値さらに、これは変数内で動作するのではなく、コマンド内で動作します。コマンドは変数の値を設定するコマンドである可能性がありますが、これは多くのケースの 1 つにすぎません。

たとえば、 コマンドはecho $foo変数の値を表示します。 ソース コードには が含まれており$foo、対応する出力には変数の値が含まれますfoo

これが「変数置換」と呼ばれる理由は、シェルが文字列(および文字列のリスト)の一連の変換によって動作するからです。たとえば(簡略化して)、コマンド を考えてみましょうls -l $dir/*.$ext。これを評価するために、いくつかのことが順番に起こります。

  1. シェルはコマンドの解析を開始し、それをls-l、 の3 つの単語に分割します$dir/*.$ext
  2. 3 番目の単語では、シェルは 2 つの変数置換を実行します (このコンテキストでは、ドル記号はこれを意味します)。 の値がdir/some/path、 の値がextであるとするtxtと、シェルは$dir/*.$extを に書き換えます/some/path/*.txt。これは、各変数の値がドル名構文に置き換えられるため、置換です。
  3. シェルはワイルドカード パターンを/some/path/*.txt一致するファイル名のリストに拡張します。
  4. シェルはls計算された引数を使用して実行します。

(構文$foo 変数の値を置き換える以上のことを行うしかしそれはまた別の話です。

ほとんどのプログラミング言語では、変数の値を取得するには、変数の名前を書くだけです。シェルは対話型で使用するように設計されているため、名前を書くとリテラル文字列として解釈されます。そのため、変数の値を取得する構文には、「変数の値を取得したい」ことを示す追加のマーカーがあります。

なぜこのアクションには、「テキスト エディターで手動で編集して変数の値を変更する」というだけでなく、特別な用語が必要なのでしょうか。

変数の置換は変数の値を変更することとは関係ありません。変数の値を変更することは割り当て

もちろん、他のコマンドと同様に、代入には変数置換を含めることができます。ただし、変数置換は代入専用に設計されているわけではありません。

さらに、エディタで変数の値を変更することはできません。すでに宣言された変数は各プロセスで値を持ち、システム構成ではありません。設定ファイルを用意して、イニシャル変数の値であり、エディタを使用してこれらのファイル内の初期値を変更できますが、その後は値が変更される可能性があります。

関連情報