シェル スクリプトでは、変数を宣言するときに先頭のドル記号は必要ありませんが、後でこの変数にアクセスする場合は、この変数名の前にドル記号を追加する必要があることに気付きました。
と同じように:
#!/bin/sh
VAR_1=Hello
VAR_2=Unix
echo "$VAR_1 $VAR_2"
これは他の言語とは異なりPerl
ます。変数名の前に常にドル記号があるため、シェルスクリプトがこのようにする正当な理由を知りたいだけですか、それとも単なる慣例です...?
シェル スクリプトでは、変数を宣言するときに先頭のドル記号は必要ありませんが、後でこの変数にアクセスする場合は、この変数名の前にドル記号を追加する必要があることに気付きました。
と同じように:
#!/bin/sh
VAR_1=Hello
VAR_2=Unix
echo "$VAR_1 $VAR_2"
これは他の言語とは異なりPerl
ます。変数名の前に常にドル記号があるため、シェルスクリプトがこのようにする正当な理由を知りたいだけですか、それとも単なる慣例です...?
Shell は Perl とは異なる言語です C++ とは異なる言語です Python とは異なる言語です。各言語に「異なるルールで」を追加できます。
シェルでは、識別子のようなVAR_1
変数に名前を付け、ドル記号を使用して展開を呼び出します。のコンテンツ$var
に置き換えられます。が設定されている場合は のコンテンツに置き換えられ、変数が設定されていない場合は単語に置き換えられます。展開は非変数でも機能します。たとえば、完全なパスと拡張子を含むファイル名が含まれている場合、ファイルのベース名のみを残す必要があるように、展開を連鎖させることができます。var
${var:-foo}
var
foo
${${var##*/}%.*}
var
Perl では、変数の前のシジルは Perl に識別子の解釈方法を伝えます:$var
スカラー、@var
配列、%var
ハッシュなどです。
Ruby では、変数の前にあるシジルは、Ruby にそのスコープvar
(ローカル変数、$var
グローバル@var
変数、オブジェクトのインスタンス変数@@var
、クラス変数) を伝えます。
C++ では、変数名の前にシジルはありません。
等。
シェルでは、$
記号は変数名の一部ではありません。次の単語を同じ名前の変数の内容に置き換えるようにシェルに指示するだけです。つまり、$foo
「変数の内容をfoo
ここに挿入する」ことを意味します。
これは、古い内容を明示的に挿入したくないため、変数への割り当て時には使用されません。変数自体を使用したい場合 (ある意味で、これはポインタの逆参照に似ています)。
これは基本的に構文規則です。
DOS/.bat ファイルの構文も同じように機能します。
1) メタ文字なしで変数を作成します。
2) 変数の内容を「逆参照」するには、メタ文字を使用します。
DOS:
set VAR=123
echo %VAR%