有什么理由使用或教导“…”替代新的开发?


16

据我了解,由于较容易且不易出错的嵌套和转义语法,更现代的$(...)命令替换语法比`基于旧的语法更可取。

此外,/bin/sh现代使用的大多数样式的shell 似乎都支持$(…)

  • 重击
  • (因此是BusyBox,因此是大多数嵌入式Linux)
  • 短跑
  • FreeBSD / bin / sh

$(…)由IEEE 1003.1规定。

所以我有两个非常相关的问题:

  • 除非您知道该脚本需要在特定的旧系统上运行,否则是否有理由在新的Shell脚本开发中使用`?
  • 是否有任何理由不教UNIX编程专业的学生仅仅编写$(...)和讨论,而只是讨论`他们在阅读其他开发人员的shell脚本时可能会遇到的过时变体(如果使用的是真正的旧系统或非标准系统,则可能需要这样做)因为某些原因)?

7
不,使用或教导毫无意义`...`。它在那里仅用于Bourne Shell的向后可移植性(就像Bourne Shell 的Thomson Shell的向后可移植性^一样(与相同|))。但是请注意,(t)csh没有$(...)(但是使用或教导它们也没有多大意义)。
斯特凡Chazelas

2
这是
格劳乔

2
等等,反引号已弃用??有人有规范的参考来解释为什么吗?(很难找到奇怪的语法字符。)
MathematicalOrchid

1
易于输入。``-2次按键; $()-shift + 4,9,shift + 0-5次按键;
六。

3
@MathematicalOrchid stackoverflow.com/questions/9405478/...好像还不错。反引号很难正确嵌套,尤其是在涉及其他引号时。
Michael Ekstrand

Answers:


19

由于经常使用反引号,因此教导这种语法结构是有意义的。

当然,$()应将样式命令替换强调为默认样式(和符合标准的构造)。

为什么反跳仍然很流行?因为它们在键入时节省了一个字符,而且可以减轻负担。


18
我不会将“
减轻眼睛负担

1
通常情况下,我在简单情况下使用backstick,在复杂情况下使用$()。但是直到现在,很多脚本仍在使用backsticks,而研究生们必须能够使用backsticks。
peterh-恢复莫妮卡2015年

@jasonwryan在这种情况下,错误的原因不是简洁,而是任意的问题。即使用反引号对眼睛容易,但事实并非为什么它被贬值了。除非您试图说糖从定义上讲是不好的,否则我们都应该选择asm。。。实际上,我喜欢外观$()更好,但反引号更容易,也更吻合。可能是通用编程的帕夫洛夫式OCDish结果。
goldilocks

@goldilocks一旦变老,可读性反而变得更加困难:在我这样的年龄,反引号实际上在代码中是不可见的……
jasonwryan 2015年

3
如果使用法语键盘,例如,`是Altrg + E,(尴尬的类型),同时$()不需要任何修改。
斯特凡Chazelas

5

我不会将它们用于编程,而将shell脚本中的过时标记替换为过时的方法教好(这似乎是共识)。我不认为它们本质上是邪恶的,并且(至少根据您对Linux命令行的一般教程判断),它们仍然经常用在简单的代码片段/单行代码中,它们可能不会被嵌套,而您只会做一次。

请参阅命令替换:是否包含反引号或美元符号/括号?


1

我避免使用该$()构造,因为它在现实世界中不可移植。您列出了四个外壳-周围的外壳变化很大(一个数量级?)。尝试在Solaris / bin / sh中运行脚本,然后看看如何进行。

另一方面,您何时停止支持旧系统?你永远都不会前进到新的做事方式吗?我认为您应该相信自己的判断,如果您可以看到新方法相对于旧方法的绝对优势,那就去做吧……这不是其中之一(我个人认为这些方法要清楚得多-他们不可能与shell变量替换混淆,这是另一回事)


1
POSIX未指定/bin/sh必须符合标准。Solaris /bin/sh确实非常不符合标准-尽管Solaris 9/10 / ...正式符合POSIX。这$()只是它不了解的一种构造。但是还有更多它无法理解或被不同理解的地方。sh在所返回的路径中获取符合条件的可移植方法getconf PATH
maxschlepzig 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.