如何为终端中的变量赋值?

Blu*_*ies 3 command-line

在终端中,如何设置新变量并为其赋值?假设我想比较两个具有长文件名的文件,然后再执行一些其他操作。由于文件名很长,我想创建两个变量,为每个变量赋值并将其用作占位符。我需要类似以下内容:

set var1 = 'long-file-name1'
set var2 = 'long-file-name2'
diff var1 var2
Run Code Online (Sandbox Code Playgroud)

Eli*_*gan 9

您问题中的伪代码(或其他 shell 或编程语言的代码)转换为以下 Bash 命令:

var1='long-file-name1'
var2='long-file-name2'
diff "$var1" "$var2"
Run Code Online (Sandbox Code Playgroud)

语法$var1参数扩展。这将var1用它的值替换变量——在这种情况下,用存储在其中的文件名。未加引号的参数扩展触发分词(也称为“场分裂”)和通配符(也称为“文件名扩展”和“路径名扩展”)。通常您不希望发生这些进一步的扩展。除非您明确知道需要它们,否则您应该确保将所有出现的参数扩展双引号中。(单引号更强大——它们也可以防止参数扩展的发生。)

它运行diff命令,其中存储的文件名var1作为第一个命令行参数var2传递,存储的文件名作为第二个命令行参数传递。这会导致diff按照您的意图比较文件的内容,就像您运行时一样:

diff 'long-file-name-1' 'long-file-name-2'
Run Code Online (Sandbox Code Playgroud)

您会注意到我没有使用该export命令。这是因为,在这种情况下,该export命令对于您正在执行的操作既不必要也不合适。当一个变量的值只需要在你的 shell 中扩展——而不是被从你的 shell 启动的程序访问时——那么你不需要(也不应该)使用export.

如果您的系统有一个奇怪的diff命令从被调用的环境变量中读取文件名var1var2而不是将文件名作为命令行参数,那么您将需要导出您的变量。但事实并非如此diff。该diff命令没有访问 - 并且不了解 - 您的变量。shell 正在扩展它们以生成它然后传递给的参数diff


Fus*_*eam 5

您可以将文件名存储在 bash 中的变量中,只需分配它即可

例如:variable=filename && variable2=filename2

然后你可以diff像这样使用这些变量的两个文件 diff $variable $variable2

注意:如果您的文件名有空格,最好对文件名和变量加双引号,尤其是在对它们执行操作时