linux shell 中的「var=${str=expr}」是什麼意思?

linux shell 中的「var=${str=expr}」是什麼意思?

linux shell 中的「var=${str=expr}」是什麼意思?誰能具體解釋一下嗎?

答案1

請參閱以下中的“參數擴充” man bash

${parameter:=word} 指定預設值。如果參數未設定或為空,則將單字的擴展分配給參數。然後替換參數的值。位置參數和特殊參數不能以這種方式分配。

上面對冒號進行了解釋:

當不執行子字串擴展時,使用下面記錄的形式,bash 測試未設定或為 null 的參數。省略冒號會導致僅測試未設定的參數。

證據:

var=${str=expr}
echo $var
echo $str

輸出:

expr
expr

答案2

在 bash 中,您可以使用 $( ) 在子 shell 中啟動任務。

例子:

#!/usr/bin/env bash
foo=${ls}
echo $foo

該腳本將使用 的結果填充變數 $foo ls
(並將echo $foo向您展示內容)。


現在回答你更具體的問題。我也不知道結果,所以我測試了它,假設「linux shell」意味著 bash,這是我的 Linux 發行版上的預設 shell。

我建立了以下文件:

#!/usr/bin/env bash
foo=${str="test 1 2 3"}
echo $foo

並運行它:

> ./test t
test 1 2 3

它似乎將字串(或表達式中)的值分配給變量將該值傳回給父腳本。


回顧一下:

  • 將啟動一個新的 shell
  • 新的 shell 將運行命令str=expr
  • 父 shell 會將結果當作輸出。
  • 父 shell 將結果儲存在 $var 中。

相關內容