【问题标题】:Conditionals in POSIX standardsPOSIX 标准中的条件
【发布时间】:2018-04-23 10:32:56
【问题描述】:

在这些日子里,我花了很多时间阅读各种关于脚本的文章和指南(主要是在 Bash 中)。最先出现的事情之一是,为了可移植性,最好的办法就是坚持使用 POSIX。

无论如何,我无法获得直接制作条件语句的标准方法......我想在这篇文章中忽略test,而是讨论[和[[。

我发现 [ 有点过时了,但每个 shell 都支持它(旧的作为 /bin/test/ 的别名,“新”作为 shell 本身的一部分)。

另一方面,我发现的几乎每个教程都使用[[,当被问及时,原因类似于“Bash 在大多数 Linux 发行版中是默认设置,所以它就像一个标准”。

当然,它们之间有很多不同之处,我个人发现[[ 更易于使用。

制作条件语句的标准方法是什么?如果没有定义标准方式:最好的方式是什么?我必须实现可移植性,而不是可读性或易用性......

关于“Bash 是事实上的标准”的立场是什么?将其用作标准而不仅仅是 POSIX 规则真的安全吗?

【问题讨论】:

    标签: shell if-statement posix


    【解决方案1】:

    Bash-特定

    [[ .. ]]
    

    POSIX = sh,就像Dash

    [ .. ]
    

    正如您还询问个人意见,我的意见是:如果没有理由使用特定于 Bash 的方式,请始终尝试遵守 POSIX 标准。


    两个例子

    比较字符串

    在 Bash 中

    [[ "$a" == "$b" ]]
    

    在 POSIX 外壳中

    [ "$a" = "$b" ]
    

    While循环条件

    在 Bash 中

    while [[ "$i" > 0 ]]
    

    在 POSIX 外壳中

    while [ "$i" -gt 0 ]
    

    结论

    虽然 POSIX 似乎更难使用,而且有时确实如此,但它使您能够将脚本移动到任何 shell 环境,即可移植性。例如,您可以在 Windows 上的Cygwin 和任何Linux shell 中运行相同的脚本。

    我现在意识到,您专门询问了if 条件语句,而我所说的也完全适用于该问题。

    【讨论】:

    • 我不能用SH,当​​我在网上找到的文档都是关于Bash的时候,你能告诉我哪个是shell脚本的文档页面||嘘
    • man sh 应该可以在许多平台上工作;也许也可以尝试man dash 等。对于 POSIX 标准,请查看pubs.opengroup.org/onlinepubs/9699919799/utilities/…
    猜你喜欢
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多