Rei*_*Rei 12 linux bash terminal ubuntu
我是linux新手,从基础开始.
- 我认为别名用于创建命令的快捷方式.但我尝试使用变量(在Ubuntu中)以下仍然有效!
$ foo="mkdir Directory"
$ $foo #this will create a directory named Directory
Run Code Online (Sandbox Code Playgroud)
使用别名:
$ alias bar="mkdir Directory"
$ bar #creates a Directory named directory
Run Code Online (Sandbox Code Playgroud)
它是如何工作的?非常感谢答案:)
Ada*_*eld 18
变量比别名更通用.变量可以在命令行中的任何位置使用(例如,作为程序参数的一部分),而别名只能用作要运行的程序的名称,即作为命令行中的第一个单词.例如:
foo="mkdir Directory"
echo $foo # Prints "mkdir Directory"
alias bar="mkdir Directory"
echo bar # Nothing gets expanded -- just "bar" is printed
Run Code Online (Sandbox Code Playgroud)
变量也可以导出到子进程的环境中.如果使用export
内置getenv(3)
函数导出变量,则程序可以使用函数来获取变量的值.
有关它可以执行的所有不同类型的扩展及其执行方式的完整描述,请参阅Bash手册.另请参阅有关别名的部分.
“变量比别名更通用”——不完全正确!
对于执行命令,变量有一些别名不共享的限制。
尝试使用变量来定义将单个星号回显到命令行的命令:
$ myCommand="echo *"
$ $myCommand
file1.x file2.y file3.z
Run Code Online (Sandbox Code Playgroud)
* 被扩展 - 这不是你想要的 - 所以然后尝试这个:
$ myCommand="echo \"*\""
$ $myCommand
"*"
Run Code Online (Sandbox Code Playgroud)
但现在出现了额外的引号 - 您也不希望出现这样的情况!
但这工作正常:
$ echo "*"
*
Run Code Online (Sandbox Code Playgroud)
这也是如此:
$ alias myCommand="echo \"*\""
$ myCommand
*
Run Code Online (Sandbox Code Playgroud)
这是因为当变量扩展时,变量内的引号被视为文字,而不是语法 - 因此在这种情况下,它们成为传递给 echo 命令的参数的一部分 - 而使用别名时,命令将“按原样”执行" 并且引号被视为语法上的,并在调用 echo 之前解析出来,就像直接从命令行键入相同的命令一样。