据我了解,更现代的$(...)
命令替换语法优于旧的`
基于 - 的语法,因为嵌套和转义语法更容易且不易出错。
/bin/sh
此外,现代使用中的大多数风格的 shell 似乎都支持$(…)
:
- 巴什
- 灰(因此还有 BusyBox,因此大多数嵌入式 Linux)
- 短跑
- FreeBSD /bin/sh
并由$(…)
IEEE 1003.1 指定。
所以我有两个非常相关的问题:
- 除非您知道脚本需要在特定的旧系统上运行,否则是否有理由在新开发的 shell 脚本中使用 `?
- 有没有理由不教 UNIX 编程学生只编写
$(...)
, 并`
仅将其作为一种过时的变体进行讨论,如果他们正在阅读其他开发人员的 shell 脚本,他们可能会遇到这种情况(如果他们正在使用非常旧的系统或非标准系统,则可能需要这种变体)因为某些原因)?
答案1
由于经常使用反引号,因此教授这种语法结构是有意义的。
当然,$()
样式命令替换应该被强调为默认样式(和符合标准的构造)。
为什么反引号仍然很流行?因为它们在打字时节省了一个字符,而且可以说它们对眼睛的负担减轻了。
答案2
我不会使用它们进行编程,并且教授在 shell 脚本中使用反引号替换作为过时的方法是可以的(这似乎是共识)。然而,我不认为它们本质上是邪恶的,并且(至少从您对 Linux 命令行的平均教程来看)它们仍然经常在简单的片段/单行代码中使用,它们可能不会嵌套以及您需要的东西。只会做一次。
答案3
我避免使用该$()
构造,因为它在现实世界中不可移植。您列出了四种外壳 - 比周围的外壳有更多的变化(一个数量级?)。尝试在 Solaris /bin/sh 中运行脚本,看看效果如何。
另一方面,你们什么时候停止支持旧系统?你永远不会进步到新的做事方式吗?我认为你应该相信你自己的判断,如果你能看到新方式相对于旧方式的明确优势,那么就去做吧......这不是其中之一(我个人发现背景更清晰 - 它们不能是与 shell 变量替换混淆,这是不同的事情)