POSIX 标准中的条件语句
Conditionals in POSIX standards
在这些日子里,我花了很多时间阅读有关脚本编写的各种文章和指南(大部分都在 Bash 中)。首先想到的事情之一是,为了便携性,最好的做法是坚持 POSIX。
无论如何,我无法获得直接制作条件语句的标准方法...我想忽略此 post 中的 test
并讨论 [
和 [[
代替。
我发现 [
有点过时,但每个 shell 都支持它(旧的作为 /bin/test/
的别名,“较新的”作为 shell 的一部分他们自己)。
另一方面,几乎我发现的每个教程都使用 [[
,当被问到时,原因是“Bash 在大多数 Linux 发行版中是默认的,所以它就像一个标准。
当然,它们之间存在很多差异,我个人认为 [[
更易于使用。
进行条件语句的标准方法是什么?如果没有定义标准方式:最好的方式是什么?我必须实现可移植性,而不是可读性或易用性...
“Bash 是事实上的标准”的立场是什么?将其用作标准而不只是 POSIX 规则真的安全吗?
Bash-具体
[[ .. ]]
POSIX = sh
, like Dash
[ .. ]
正如您还征求了个人意见,我的意见是:如果没有理由使用 Bash 特定方式,请始终尝试遵守 POSIX 标准。
两个例子
比较字符串
在Bash
[[ "$a" == "$b" ]]
在 POSIX shell
[ "$a" = "$b" ]
While循环条件
在Bash
while [[ "$i" > 0 ]]
在 POSIX shell
while [ "$i" -gt 0 ]
结论
虽然 POSIX 似乎更难使用,而且有时确实如此,但它使您能够将脚本移动到任何 shell 环境,即可移植性。例如,您可以在 Cygwin and in any Linux shell.
Windows 上 运行 相同的脚本
我现在明白了,你专门问了if
条件语句,我说的也完全适用于那个问题。
在这些日子里,我花了很多时间阅读有关脚本编写的各种文章和指南(大部分都在 Bash 中)。首先想到的事情之一是,为了便携性,最好的做法是坚持 POSIX。
无论如何,我无法获得直接制作条件语句的标准方法...我想忽略此 post 中的 test
并讨论 [
和 [[
代替。
我发现 [
有点过时,但每个 shell 都支持它(旧的作为 /bin/test/
的别名,“较新的”作为 shell 的一部分他们自己)。
另一方面,几乎我发现的每个教程都使用 [[
,当被问到时,原因是“Bash 在大多数 Linux 发行版中是默认的,所以它就像一个标准。
当然,它们之间存在很多差异,我个人认为 [[
更易于使用。
进行条件语句的标准方法是什么?如果没有定义标准方式:最好的方式是什么?我必须实现可移植性,而不是可读性或易用性...
“Bash 是事实上的标准”的立场是什么?将其用作标准而不只是 POSIX 规则真的安全吗?
Bash-具体
[[ .. ]]
POSIX = sh
, like Dash
[ .. ]
正如您还征求了个人意见,我的意见是:如果没有理由使用 Bash 特定方式,请始终尝试遵守 POSIX 标准。
两个例子
比较字符串
在Bash
[[ "$a" == "$b" ]]
在 POSIX shell
[ "$a" = "$b" ]
While循环条件
在Bash
while [[ "$i" > 0 ]]
在 POSIX shell
while [ "$i" -gt 0 ]
结论
虽然 POSIX 似乎更难使用,而且有时确实如此,但它使您能够将脚本移动到任何 shell 环境,即可移植性。例如,您可以在 Cygwin and in any Linux shell.
Windows 上 运行 相同的脚本我现在明白了,你专门问了if
条件语句,我说的也完全适用于那个问题。