像Linux 這樣的基於GNU 的作業系統依賴一個名為Bash 的命令語言解釋器或Shell 來完成它們的大部分計算任務和目標。
Bash 是 Bourne Again Shell 的縮寫,Bunne Again Shell 是雙關的名稱,是對 Bourne Shell (即 Steven Bourne 發明)的致敬。在相容性方面,Bash 和 sh 是絕配。 C shell ( csh ) 和Korn shell ( ksh ) 中明顯的有用特性也包含在這個 shell 語言解釋器中。
在實作方面,Bash 旨在符合 IEEE POSIX 規範(IEEE 標準 1003.1)工具部分和 IEEE POSIX Shell。因此,作為一個互動式和程式設計工具,Bash 提供的功能改進勝過 sh 中的改進。
Linux 和其他基於 GNU 的作業系統的使用者不必僅僅依賴Bash作為他們的主要命令語言解釋器,因為像 csh 這樣的 shell 版本也預先打包在這些系統中。由於其獨特的 shell 屬性(如可移植性),Bash 僅配置為用作預設 Linux shell。
為了比較這兩個與Bash 環境相關的屬性,我們必須重申$() to$(command)
和${}to ${parameter}
。因此,我們可以嘗試定義這兩個 Bash 實體。
$(command)
在Bash中涉及命令替換。更具體地說,命令部分in$(command)
被執行,其輸出被捕獲並印在標準輸出上。
牛逼啊!接私活必备的 N 个开源项目!赶快收藏
背後的語法$(command)
是令牌層級的。考慮執行以下命令,該命令旨在在終端機上列印出當前日期。
echo "今天是 $(date). LinuxMi.com 又是美好的一天。"
在 Linux 中打印日期
上述执行可以用以下方式解释。首先,执行 date 命令并将其输出作为参数包含在 echo 命令中。
在这里,我们可以假设命令替换在重新包含在主 shell 之前在单独的子 shell 中执行。
${parameter}
在Bash中涉及参数替换。根据 Bash 手册页,参数是一个值存储实体。参数实体可以与名称、数字或特殊字符相关联。
大括号{}
暗示我们在处理位置参数,或者在使用的参数(参数值)后面是一个与参数名称不相关的非解释性字符,例如${animal}s
。
至于位置参数,可以用一个或多个数字来表示(单个数字 0 除外)。因此,如果我们有一个名为$variable_name
的变量,则可以使用参数 替换${parameter}
来检索关联的变量值。
考虑以下变量声明命令:
$ animal=lion
让我们调用 animal 变量以尝试将变量值复数:
$ echo $animals
在命令中声明变量
在标准输出中不会打印任何内容,因为 Bash 不理解变量$animals
。但是,我们可以通过如下方式使用参数替换方法成功调用我们的$animals
变量:
$ echo ${animal}s
在命令中调用变量
在某些情况下,感叹号可能会在参数替换实现的第一个左大括号之后出现。在这种情况下,就会出现变量间接的概念。另外,搜索公众号Linux就该这样学后台回复“猴子”,获取一份惊喜礼包。
变量值优先于参数值,如下所示:
$ animal=lion $ echo $animal $ lion=rafiki $ echo $lion $ echo ${!animal}
参数值的优先级
希望本文能够说明 Bash 中$()
和${}
之间的区别。
以上是Bash 中的 ${} 和 $() 有什麼差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!