我是linux新手,从基础开始。
- 我认为别名用于创建命令的快捷方式。 但我尝试了以下使用变量(在Ubuntu中)并仍然有效!
$ foo="mkdir Directory"
$ $foo #this will create a directory named Directory
使用别名:
$ alias bar="mkdir Directory"
$ bar #creates a Directory named directory
它是如何工作的? 非常感谢答案:)
答案 0 :(得分:15)
变量比别名更通用。变量可以在命令行中的任何地方使用(例如,作为程序参数的一部分),而别名只能 用作要运行的程序的名称,即作为命令行中的第一个单词。例如:
foo="mkdir Directory"
echo $foo # Prints "mkdir Directory"
alias bar="mkdir Directory"
echo bar # Nothing gets expanded -- just "bar" is printed
变量也可以导出到子进程的环境中。如果使用export
builtin导出变量,则程序可以使用getenv(3)
函数来获取变量的值。
有关它可以执行的所有不同类型扩展及其执行方式的完整描述,请参阅Bash manual。另请参阅aliases部分。
答案 1 :(得分:2)
“变量比别名更通用” - 不完全正确!
对于执行命令,变量有一些限制,不能由别名共享。
尝试使用变量来定义将单个星号回显到命令行的命令:
$ myCommand="echo *"
$ $myCommand
file1.x file2.y file3.z
*被扩展 - 这不是你想要的 - 所以试试这个:
$ myCommand="echo \"*\""
$ $myCommand
"*"
但现在你出现了额外的引号 - 你也不想要它!
但这样可行:
$ echo "*"
*
这样做:
$ alias myCommand="echo \"*\""
$ myCommand
*
这是因为变量内部的引号被视为文字,而不是扩展变量时的语法 - 所以在这种情况下它们成为传递给echo命令的参数的一部分 - 而使用别名执行命令“按原样”,引号被视为语法,并在调用echo之前进行解析,就像直接从命令行键入相同的命令一样。
答案 2 :(得分:1)
请注意,当您键入别名时,就好像它是一个命令一样,您不要键入$
;键入变量时,必须包含它。因此,别名更自然地作为命令的替代名称。
答案 3 :(得分:1)
在变量形式中,它被扩展和评估。
因此
$ $foo
扩展为
$ mkdir Directory
可以评估。这与foo是一个论证是相同的扩展类型:
$ echo $USER
对于别名,您可以使用名称(no $)直接引用它们,只有在它是第一个单词时才会展开它。
答案 4 :(得分:0)
变量会在任何地方替换它们的内容。
$ foo="mkdir Directory"
$ $foo
$ echo "$foo"
别名充当实际命令,或者更确切地说是一个的前缀。
$ alias bar="mkdir Directory"
$ bar directory2 #creates directories named "directory" and "directory2"
$ echo bar