ターミナルで変数に値を割り当てるにはどうすればいいですか?

ターミナルで変数に値を割り当てるにはどうすればいいですか?

ターミナルで、新しい変数を設定して値を割り当てるにはどうすればよいですか? 長いファイル名を持つ 2 つのファイルを比較し、他の操作も実行したいとします。ファイル名が長いため、2 つの変数を作成し、各変数に値を割り当ててプレースホルダーとして使用します。次のようなものが必要です。

set var1 = 'long-file-name1'
set var2 = 'long-file-name2'
diff var1 var2

答え1

質問内の疑似コード (または他のシェルやプログラミング言語のコード) は、次の Bash コマンドに変換されます。

var1='long-file-name1'
var2='long-file-name2'
diff "$var1" "$var2"

構文$var1パラメータ拡張. これにより、変数がvar1その値に置き換えられます。この場合、変数に格納されているファイル名に置き換えられます。引用符で囲まれていないパラメータ展開は、単語の分割(「フィールド分割」とも呼ばれる)グロビング(「ファイル名の拡張」や「パス名の拡張」とも呼ばれます)。通常、このような拡張は発生させたくないものです。あなたがそれを欲しいと具体的に知っている場合を除いて、 あなたがすべき必ず同封してくださいパラメータ展開のすべての発生二重引用符。 (一重引用符さらに強力で、パラメータの拡張も防止します。

これにより、 passeddiffに格納されているファイル名がvar1最初のコマンドライン引数として、var2passed に格納されているファイル名が 2 番目のコマンドライン引数としてコマンドが実行されます。これにより、diffファイルの内容を比較します次のように実行した場合と同じように、意図したとおりに実行されます。

diff 'long-file-name-1' 'long-file-name-2'

コマンドを使用していないことに気付くでしょうexportこの場合、exportコマンドは必要でも適切でもない変数の値がシェル内でのみ展開され、シェルから起動したプログラムによってアクセスされる-- を使用する場合は、 を使用する必要はありません (また、 を使用するべきではありません) export

システムに、ファイル名をコマンドライン引数として受け取るのではなく、diff環境変数からファイル名を読み取る という奇妙なコマンドがある場合、変数をエクスポートする必要があります。しかし、それは動作しません。コマンドは変数にアクセスせず、変数について何も知りません。シェルは変数を展開して、 に渡す引数を生成します。var1var2diffdiffdiff

答え2

bashでは、ファイル名を変数に格納するには、次のように代入するだけです。

例えば:variable=filename && variable2=filename2

diffこれらの変数を使用して2つのファイルを次のように することができますdiff $variable $variable2

注意:ファイル名にスペースが含まれている場合は、特にファイル名と変数の両方を二重引用符で囲むことをお勧めします。

関連情報