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 中。