Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Bash命令:What';变量和别名之间的区别是什么?_Linux_Bash_Ubuntu_Terminal - Fatal编程技术网

Linux Bash命令:What';变量和别名之间的区别是什么?

Linux Bash命令:What';变量和别名之间的区别是什么?,linux,bash,ubuntu,terminal,Linux,Bash,Ubuntu,Terminal,我是linux新手,从基础做起 -- 我以为alias是用来创建命令的快捷方式的。 但是我用一个变量(在Ubuntu中)尝试了下面的方法,仍然有效 $ foo="mkdir Directory" $ $foo #this will create a directory named Directory 使用别名: $ alias bar="mkdir Directory" $ bar #creates a Directory named directory 这就是它的工作原理吗? 非常感谢您的

我是linux新手,从基础做起

-- 我以为alias是用来创建命令的快捷方式的。 但是我用一个变量(在Ubuntu中)尝试了下面的方法,仍然有效

$ foo="mkdir Directory"
$ $foo #this will create a directory named Directory
使用别名:

$ alias bar="mkdir Directory"
$ bar #creates a Directory named directory
这就是它的工作原理吗?
非常感谢您的回答:)

请注意,当您像键入命令一样键入别名时,您不会键入
$
;键入变量时,必须包含它。因此,别名更自然地充当命令的替代名称

在变量形式中,它被展开和评估

因此

扩展到

$ mkdir Directory
这是可以评估的。这与foo是一个参数的扩展类型相同:

$ echo $USER

对于别名,您可以使用名称(no$)直接引用它们,并且仅当它是第一个单词时才会展开。

变量在使用它们的任何地方都会替换它们的内容

$ foo="mkdir Directory"
$ $foo
$ echo "$foo"
别名充当实际命令,或者更确切地说是一个命令的前缀

$ alias bar="mkdir Directory"
$ bar directory2  #creates directories named "directory" and "directory2"
$ echo bar

变量比别名更通用。变量可以在命令行中的任何位置使用(例如,作为程序参数的一部分),而别名只能用作要运行的程序的名称,即作为命令行中的第一个字。例如:

foo="mkdir Directory"
echo $foo  # Prints "mkdir Directory"

alias bar="mkdir Directory"
echo bar  # Nothing gets expanded -- just "bar" is printed
变量也可以导出到子进程的环境中。如果使用导出变量,则程序可以使用函数获取变量的值

有关它可以执行的所有不同类型的扩展及其执行方式的完整描述,请参见。另请参见。

“变量比别名更通用”一节-不完全正确

对于执行命令,变量有一些限制,这些限制不是别名共享的

请尝试使用变量定义将单个星号回响到命令行的命令:

$ myCommand="echo *"
$ $myCommand
file1.x file2.y file3.z
*已展开-这不是您想要的-因此请尝试以下操作:

$ myCommand="echo \"*\""
$ $myCommand
"*"
但现在你有额外的引号出现-你也不想这样

但这是可行的:

$ echo "*"
*
这也是:

$ alias myCommand="echo \"*\""
$ myCommand
*

这是因为变量内部的引号在展开变量时被视为文字,而不是语法-因此在本例中,它们成为传递给echo命令的参数的一部分-而对于别名,命令按“原样”执行,引号被视为语法,并在调用echo之前解析出来,就像您直接从命令行键入相同的命令一样。

Cool!!我喜欢所有的答案,但我必须选择这一个。你会考虑这样的解决方案(使用变量)作为良好的实践吗?
$ alias myCommand="echo \"*\""
$ myCommand
*