ターミナルで、新しい変数を設定して値を割り当てるにはどうすればよいですか? 長いファイル名を持つ 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
最初のコマンドライン引数として、var2
passed に格納されているファイル名が 2 番目のコマンドライン引数としてコマンドが実行されます。これにより、diff
ファイルの内容を比較します次のように実行した場合と同じように、意図したとおりに実行されます。
diff 'long-file-name-1' 'long-file-name-2'
コマンドを使用していないことに気付くでしょうexport
。この場合、export
コマンドは必要でも適切でもない変数の値がシェル内でのみ展開され、シェルから起動したプログラムによってアクセスされる-- を使用する場合は、 を使用する必要はありません (また、 を使用するべきではありません) export
。
システムに、ファイル名をコマンドライン引数として受け取るのではなく、diff
環境変数からファイル名を読み取る という奇妙なコマンドがある場合、変数をエクスポートする必要があります。しかし、それは動作しません。コマンドは変数にアクセスせず、変数について何も知りません。シェルは変数を展開して、 に渡す引数を生成します。var1
var2
diff
diff
diff
答え2
bashでは、ファイル名を変数に格納するには、次のように代入するだけです。
例えば:variable=filename && variable2=filename2
diff
これらの変数を使用して2つのファイルを次のように することができますdiff $variable $variable2
注意:ファイル名にスペースが含まれている場合は、特にファイル名と変数の両方を二重引用符で囲むことをお勧めします。