拡張変数と印刷変数(echoやprintfなど)の違いは何ですか?

拡張変数と印刷変数(echoやprintfなど)の違いは何ですか?

変数の拡張と変数の印刷(例:echoまたは)printfの違いは何ですか?

私が正しく理解したら、変数(対応する値)を印刷するのは単なる例です。拡大するそれ。おそらくその価値を置き換えるまた例です。

修正する

「変数拡張」という用語について簡単に定義してください。君の言葉で教えて、違いを説明する直前。

答え1

拡張と印刷は異なるジョブです。拡張カバーシェルがコマンドを処理するステップ数:Bashでは、中括弧拡張({1..5}これ1 2 3 4 5)、チルダ拡張(適切になる~user/home/user、シェル引数拡張(${variable}変数値で置き換え)、コマンド置換、算術拡張、プロセス置換、トークン化、およびファイル名拡張が可能です。 (あなたも見ることができますPOSIXワード拡張.)

拡張という用語の全てのこれらの用途の1つの可能な説明は、全てコマンド拡張につながることができることである。つまり長くなります(これはCでシェルを開発するときに特に考慮する必要があります)。

あなたの場合、拡張はパラメータ拡張です。

echo "${variable}"

~になる

echo "value"

あなたが言った変数を置き換えた後

echo value

引用符を削除して(少し単純化)、echo印刷します。 Justechoprintfはシェルに組み込まれているため、シェルのみが含まれていますが、ステップは分離されており、状況は外部コマンドと同じです。

したがって、印刷は拡張の特別なケースではありませんでした。ただし、リンクされた質問に示すように、交換については次を参照してください。バッシュマニュアルもっと学ぶ。

答え2

たとえば、シェルの機能を見てみましょう。

  • ユーザー入力を待ちます
  • ユーザー入力の解釈
  • ユーザー入力に応じたアクション
  • 他のプログラム/プロセスと通信

もちろんあります。

  • データを画面に印刷

...実際にはターミナルまでです。それにもかかわらず、シェルはユーザーがデータを見ることができるようにアクションを実行します。

シェルがすることは変数を拡張するだけです。ユーザー入力を解釈するとき。シェルは、ユーザーが変数を参照したことを認識し、ユーザー入力が参照ではなく変数の内容を含むようにユーザー入力を解釈します。たとえば、FOO値を格納する変数があるとしますbar。ユーザーはステートメントを入力しますecho $FOO。シェルはステートメントの解釈を開始し、それを指定$FOOされた変数への参照として認識し、ユーザーがFOO入力したようにステートメントを解釈し続けますecho bar

印刷変数はその内容を投影するユーザーが認識できる方法(読み取りなど)。変数に格納された値をユーザーに渡すために処理する実際の操作を実行します。例では、echo $FOO変数がFOO最初に展開され、次に拡張の結果としてechoルーチンがコンテンツをFOO画面に印刷します。

ある意味では、値を印刷することは変数を拡張するのとは反対です。変数が展開されるとシェルがデータを読み込んでいます何をすべきかを決めるため。変数を印刷するとき、シェルがデータを配布しています。、ユーザーに。

答え3

簡単に言えば、変数を拡張するとその値が置き換えられ、その変数はシェルコマンドまたはスクリプトの一部として使用できます。

echoprintf文字列を標準出力(通常画面)に印刷する特定のコマンドです。文字列は、拡張シェル変数、文字列リテラル、または他のコマンドまたはコマンドセットの出力です。

したがって、ご覧のように全く異なります。変数を印刷せずに拡張することも、拡張変数以外のものを印刷することもできます。

答え4

シェルは、影響を受けたコマンドを実行する前に変数拡張を実行します。これはコマンドとは何の関係もありません。コマンドでもecho別のprintfコマンドでもかまいません。

たとえば、

param='-ltr'
ls $param

次に展開

ls -ltr

実行されるコマンドです。

関連情報