在终端中,如何设置新变量并为其赋值?假设我想比较两个具有长文件名的文件,然后还执行一些其他操作。由于文件名很长,我想创建两个变量,为每个变量赋值并将其用作占位符。我需要以下内容:
set var1 = 'long-file-name1'
set var2 = 'long-file-name2'
diff var1 var2
在终端中,如何设置新变量并为其赋值?假设我想比较两个具有长文件名的文件,然后还执行一些其他操作。由于文件名很长,我想创建两个变量,为每个变量赋值并将其用作占位符。我需要以下内容:
set var1 = 'long-file-name1'
set var2 = 'long-file-name2'
diff var1 var2
您问题中的伪代码(或其他一些 shell 或编程语言的代码)转换为以下 Bash 命令:
语法
$var1
是参数扩展。这会将变量替换为var1
它的值——在这种情况下,使用存储在其中的文件名。不带引号的参数扩展会触发分词(也称为“字段拆分”)和通配符(也称为“文件名扩展”和“路径名扩展”)。通常您不希望发生这些进一步的扩展。除非您明确知道您需要它们,否则您应该确保将所有出现的参数扩展用双引号括起来。(单引号更强大——它们也可以防止参数扩展的发生。)这将运行
diff
命令,其中存储的文件名var1
作为其第一个命令行参数var2
传递,而存储的文件名作为其第二个命令行参数传递。这会导致按照您diff
的意图比较文件的内容,就像您运行时一样:您会注意到我没有使用该
export
命令。这是因为,在这种情况下,该export
命令对于您正在做的事情既不必要也不合适。当变量的值只需要在你的 shell 中扩展——而不是被从你的 shell 启动的程序访问——那么你不需要(也不应该)使用export
.如果您的系统有一个奇怪的
diff
命令从调用的环境变量中读取文件名var1
,var2
而不是将文件名作为命令行参数,那么您需要导出变量。但事实并非如此diff
。该diff
命令没有访问 - 并且不知道任何关于 - 您的变量。shell 正在扩展它们以产生参数,然后传递给diff
.您可以将文件名存储在 bash 中的变量中,只需分配它
例如:
variable=filename && variable2=filename2
然后你可以
diff
像这样使用这些变量的两个文件diff $variable $variable2
注意:如果您的文件名有空格,最好将文件名和变量都用双引号引起来,尤其是在对它们执行操作时