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