2
A
回答
3
1
這是由於shell處理替換和變量的順序。根據POSIX rules for a shell:
當需要一個給定的簡單的命令要被執行(即,當 任何條件結構例如AND-OR列表或case語句 沒有繞過簡單的命令),則
詞被識別爲可變分配或根據殼牌語法規則重定向被保存用於處理:以下的擴展, 賦值和重定向均應從 開始命令文本到端部的情況下進行 步驟3和步驟4.
不應變量賦值或重定向的單詞應擴展。如果任何字段在擴展後仍然存在,則第一個 字段應被視爲命令名稱,其餘字段爲該命令的參數 。
重定向應按照重定向中的描述執行。
在分配值之前,每個變量分配都應擴展用於波形擴展,參數擴展,命令替換,算術擴展和刪除報價。
這意味着已經發生參數擴展之後執行的變量賦值,例如$a
已在處理該命令的a=
變量分配之前展開。 a
的新值將被傳遞到命令的執行環境中,但在這種情況下echo
不會有任何用處。
如果您使用一個尚不存在的變量,您可能會看到更好的情況。
$ unset a
$ a=two echo \($a\)
()
$ a=one
$ a=two echo \($a\)
(one)
這裏有一個例子,你可以看到變量賦值傳遞給所執行的命令的執行環境:
$ a=one
$ a=two python -c 'import os;print(os.environ["a"])'
two
相關問題
- 1. 這些陳述如何工作?
- 2. 我將如何分離這些陳述?
- 3. Bash案例陳述
- 4. 學習PHP - 有人可以解釋這個如果陳述嗎?
- 5. 不能理解這個,如果陳述
- 6. 這些陳述有什麼區別嗎?
- 7. 我可以合併這些陳述嗎?
- 8. 如何將這兩個陳述合併成一個陳述?
- 9. 有人可以解釋這個陳述的意思
- 10. 請解釋這個Java布爾邏輯陳述
- 11. Bash如果陳述 - 放棄希望
- 12. sql:如何改進這個陳述
- 13. 如何處理這種陳述?
- 14. Bash不理解超級簡單如果陳述
- 15. 案件陳述裏面如果陳述
- 16. 如果陳述「不是陳述」?
- 17. 如果陳述在案例陳述(VB.Net)
- 18. 解釋這一BASH表達
- 19. 解釋這個bash腳本
- 20. 這些陳述意味着什麼,並建議這種風格?
- 21. 如何解釋這些說明?
- 22. 解碼爲個案陳述
- 23. bash - 如何解釋別名?
- 24. 如何縮短「和」陳述?
- 25. 如何將多個陳述合併爲一個陳述?
- 26. 如何隱藏一個陳述並揭示另一個陳述?
- 27. 請解釋這些代碼
- 28. 這個「&」在這個陳述中是如何工作的?
- 29. PHP如果陳述
- 30. 如果陳述在
工作正常,我。 '''bash-3.2 $ a = 1 bash-3。2 $ echo $ a one bash-3.2 $ a = two bash-3.2 $ echo $ a two''' – osman
我同意你的意見,但是,我的腳本在fedora 21上運行有什麼問題? –
我可以驗證行爲,但我無法解釋它。有趣的問題! – arkascha