shell程式設計中什麼是變數替換

shell程式設計中什麼是變數替換

這個問題非常基本,我不僅向自己問這個問題,還向其他看到這個術語的新人問這個問題變數替換並有以下想法:

據我了解,這個詞變數替換描述了“用一個變數的值替換另一個變數的值”,但我懷疑這是正確的。
我想知道為什麼此操作需要一個特殊術語,而不只是說“通過在文字編輯器中手動編輯變數來更改變數的值?”

什麼是變數替換shell 程式設計中的概念,如果您知道答案,請給出一個實際範例,說明它在您的工作中使用了哪些類型的操作。

答案1

將給定變數的值替換為另一個變數的值。

這種描述在很多方面都是錯誤的。變數替換取代姓名變數(加上一些語法錯誤)的價值。此外,它不是在變數“中”操作,而是在命令中操作。這個命令可以是設定變數值的命令,但這只是眾多情況中的一種。

例如,該指令echo $foo顯示變數的值。原始碼包含$foo,並且對應的輸出包含變數的值foo

這被稱為「變數替換」的原因是 shell 透過一系列字串(和字串清單)轉換來操作。例如(簡化),考慮命令ls -l $dir/*.$ext。為了評估它,需要按順序發生幾件事:

  1. shell 開始解析指令並將其拆分為三個單字:ls-l$dir/*.$ext
  2. 在第三個單字中,shell 看到要執行兩個變數替換(這就是美元符號在此上下文中的含義)。假設diris的值和is/some/path的值,則 shell 重寫為.這是一個替換,因為每個變數的值都替換了美元名稱語法。exttxt$dir/*.$ext/some/path/*.txt
  3. shell 將通配符模式擴展/some/path/*.txt為符合檔案名稱的清單。
  4. shellls使用計算出的參數執行。

(文法$foo 不只是替換變數的值但這是另一個故事了。

在大多數程式語言中,要取得變數的值,只需編寫變數的名稱即可。 shell 是為互動式使用而設計的;如果你寫一個名字,它會被解釋為一個文字字串。這就是為什麼獲取變數值的語法有一個額外的標記來表示「我想取得變數的值」。

為什麼此操作需要一個特殊術語,而不只是說“通過在文字編輯器中手動編輯變數來更改變數的值?”

變數替換與更改變數的值無關。改變變數的值是任務

當然,像任何其他命令一樣,賦值可以包含變數替換。但變數替換並不是專門為賦值而設計的。

此外,您無法使用編輯器變更變數的值。已宣告的變數在每個進程中都有一個值,它不是系統配置。您可以使用設定檔來設定最初的變數的值,您可以使用編輯器來變更這些檔案中的初始值,但之後該值可以變更。

相關內容