私の教科書で2つのUnixスクリプトを見つけました。 1つa=$b
(max = $ a形式)ともう1つa=b
(number = num形式)で実装します。
これらは同じものですか、それとも違いがありますか?
答え1
$ a=b
$ printf $a
b
$ b=hello
$ a=$b
$ printf $b
hello
デフォルトでは、値がリテラルのa=b
変数を作成します。名前付き変数が名前付き既存の変数と同じ値を持つようにします。a
b
a=$b
a
b
答え2
この場合、a=$b
変数の値b
をに割り当てますa
。リテラル文字列 ""の値をa=b
割り当てる場合a
b
たとえば、と同じ値をb=10
割り当てるとします。次のいずれかを実行できます。a
b
a=$b
または、
a=10
答え3
bash
ヘルプリクエストを使用してこれらの質問に答えることもできますset -x
。このフラグは bash に、コマンドを実行する前にコマンドと拡張引数を表示するように指示します。
まず、いくつかの設定は次のとおりです。
$ a=some-value
$ b=some-other-value
$ set -x
次に、シェルがこれらのコマンドをどのように解釈するかを見てみましょう。
$ a=b
+ a=b
変数の値はa
リテラル文字列「b」に設定されます。
今試してみましょう$b
。
$ a=$b
+ a=some-other-value
ここで私たちはシェルに言います。評価する $b
b
コマンドに値を挿入します。
これはシェルのいくつかの値を示しています。個々のコマンドが操作を実行するのではなく、変数とワイルドカードを解釈します。たとえば、シェルは始める前に作業を実行するため、ls
「* .txt」を解釈する方法を知る必要はありません。ls
$ ls *.txt
+ ls a.txt b.txt c.txt
a.txt b.txt c.txt