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