当前位置: 首页 > 科技观察

Bash中的${}和$()有什么区别

时间:2023-03-17 18:10:36 科技观察

基于GNU的操作系统(如Linux)的大部分计算任务和目标都依赖命令语言解释器或称为Bash的shell。BBash是BourneAgainShell的缩写,BunneAgainShell是一个双关语名称,致敬BourneShell(即由StevenBourne发明)。在兼容性方面,Bash和sh是绝配。Cshell(csh)和Kornshell(ksh)中明显的有用功能也包含在此shell语言解释器中。在实现方面,Bash被设计为符合IEEEPOSIX规范(IEEEStd1003.1)和IEEEPOSIXShell的工具部分。因此,作为一种交互和编程工具,Bash提供了对sh中发现的功能的改进。Linux和其他基于GNU的操作系统的用户不必完全依赖Bash作为他们的主要命令语言解释器,因为像csh这样的shell版本也预先打包在这些系统中。由于其独特的shell属性(例如可移植性),Bash仅配置为用作默认Linuxshell。比较Bash中的$()与${}要比较这两个相对于Bash环境的属性,我们必须重申$()到$(command)和${}到${parameter}。所以我们可以尝试定义这两个Bash实体。理解$(command)$(command)涉及Bash中的命令替换。更具体地说,$(command)中的命令部分被执行,其输出被捕获并打印在标准输出上。$(command)背后的语法是令牌级别。考虑执行以下命令,该命令旨在在终端上打印出当前日期。echo"今天是$(date)。LinuxMi.com又是一个好日子。"在Linux中打印日期上面的执行可以用以下方式解释。首先,执行date命令并将其输出作为echo命令的参数。在这里,我们可以假设命令替换在重新包含在主shell中之前在单独的子shell中执行。了解${parameter}${parameter}如何涉及Bash中的参数替换。根据Bash手册页,参数是一个值存储实体。参数实体可以与名称、数字或特殊字符相关联。大括号{}暗示我们处理的是位置参数,或者说使用的参数(参数值)后面跟一个与参数名无关的非解释性字符,比如${animal}s。对于位置参数,可以用一个或多个数字表示(单个数字0除外)。因此,如果我们有一个名为$variable_name的变量,我们可以用参数替换${parameter}以检索关联的变量值。考虑以下变量声明命令:$animal=lion让我们调用animal变量来尝试使变量值复数:$echo$animals在命令中声明变量不会向标准输出打印任何内容,因为Bash不理解变量$animals。但是,我们可以使用参数替换方法成功调用我们的$animals变量,如下所示:$echo${animal}s在括号后出现的命令中调用变量。在这种情况下,就产生了变量间接的概念。变量值优先于参数值如下:$animal=lion$echo$animal$lion=rafiki$echo$lion$echo${!animal}参数值的优先级