我有以下 bash 腳本:
$ echo $(dotnet run --project Updater)
UPDATE_NEEDED='0' MD5_SUM="7e3ad68397421276a205ac5810063e0a"
$ export UPDATE_NEEDED='0' MD5_SUM="7e3ad68397421276a205ac5810063e0a"
$ echo $UPDATE_NEEDED
0
$ export $(dotnet run --project Updater)
$ echo $UPDATE_NEEDED
'0'
為什么它$UPDATE_NEEDED在0第 3 個命令上,但'0'在第 5 個命令上?
我需要做什么才能讓它簡單地設定為 0?代替使用UPDATE_NEEDED=0不是一種選擇,因為其他一些變數可能包含一個空格(我想樂觀地參考它們以使其正確決議空格)。
另外,這有點XY 問題。如果有人知道從可執行檔案中匯出多個變數的更簡單方法,以便稍后在 bash 腳本中使用,那也很有用。
uj5u.com熱心網友回復:
擴展格倫的答案:
當你用
export UPDATE_NEEDED='0'Bash 代碼撰寫類似的東西時,這與export UPDATE_NEEDED=0. Bash 使用引號來決議命令運算式,但它們會立即被丟棄。它們的唯一目的是防止分詞并避免轉義特殊字符。同樣,就 Bash 而言,代碼片段'foo bar'與foo\ barBash完全相同:兩者都導致空格被視為文字而不是分詞器。相反,引數擴展遵循不同的規則,并保留文字引號。
當您使用
eval時,傳遞給的命令列引數eval被視為 Bash 代碼,因此遵循與常規 Bash 代碼相同的擴展規則,這導致與 (1) 相同的結果。
uj5u.com熱心網友回復:
顯然,Updater 專案正在做相當于
echo "UPDATE_NEEDED=\'0\' MD5_SUM=\"7e3ad68397421276a205ac5810063e0a\""
它明確地輸出引號。
當您這樣做時export UPDATE_NEEDED='0' MD5_SUM="7e3ad68397421276a205ac5810063e0a",bash 最終會在實際設定變數之前洗掉引號。
我同意@pynexj,eval這里有保證,但建議額外參考:
eval export "$(dotnet ...)"
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/414662.html
標籤:
下一篇:在bash中用換行符連接字串?
