亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我不能指定環境變量并在同一命令行中回顯它?

為什么我不能指定環境變量并在同一命令行中回顯它?

冉冉說 2019-11-13 14:39:09
請考慮以下代碼段:$ SOMEVAR=AAA$ echo zzz $SOMEVAR zzzzzz AAA zzz在這里,我將第一行設置$SOMEVAR為AAA-在第二行中回顯它時,AAA將按預期獲得內容。但是,如果我嘗試在與以下命令相同的命令行上指定變量echo:$ SOMEVAR=BBB echo zzz $SOMEVAR zzzzzz AAA zzz...我沒有得到BBB我期望的-我得到了舊值(AAA)。這是應該的樣子嗎?如果是這樣,那您怎么能指定like這樣的變量LD_PRELOAD=/... program args ...并使其起作用呢?我想念什么?
查看完整描述

3 回答

?
慕的地6264312

TA貢獻1817條經驗 獲得超6個贊

您看到的是預期的行為。問題在于父外殼程序$SOMEVAR在使用修改后的環境調用命令之前會在命令行上求值。您需要獲得$SOMEVAR推遲評估,直到設置了環境。


您的直接選擇包括:


SOMEVAR=BBB eval echo zzz '$SOMEVAR' zzz。

SOMEVAR=BBB sh -c 'echo zzz $SOMEVAR zzz'。

兩者都使用單引號防止父外殼評估$SOMEVAR; 僅在環境中設置它之后(臨時,在單個命令的持續時間內)才對它進行評估。


另一個選擇是使用sub-shell表示法(也由Marcus Kuhn在他的答案中建議):


(SOMEVAR=BBB; echo zzz $SOMEVAR zzz)

該變量僅在子外殼中設置


查看完整回答
反對 回復 2019-11-13
?
浮云間

TA貢獻1829條經驗 獲得超4個贊


要實現您想要的,請使用


( SOMEVAR=BBB; echo zzz $SOMEVAR zzz )

原因:


您必須用分號或換行符將分配與下一個命令分開,否則在下一個命令(echo)發生參數擴展之前不會執行該分配。


您需要在子Shell環境中進行分配,以確保其不會在當前行之外持續存在。


該解決方案比其他建議的解決方案更短,更整潔且更有效,特別是它不會創建新的過程。


查看完整回答
反對 回復 2019-11-13
  • 3 回答
  • 0 關注
  • 474 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號