ing*_*oxd 7 shell posix if-statement
这些天我花了很多时间阅读有关脚本编写的各种文章和指南(大部分是 Bash 的)。首先出现的事情之一是最好的办法是坚持使用 POSIX,以实现可移植性。
不管怎样,我无法得到直接做出条件陈述的标准方法......我想test在这篇文章中忽略[并讨论[[。
我发现这[有点过时,但每个 shell 都支持它(旧的作为 的别名/bin/test/,“新”作为 shell 本身的一部分)。
另一方面,我发现几乎每个教程都使用[[, 并且当被问到时,原因是“Bash 在大多数 Linux 发行版中是默认的,所以它就像一个标准”。
当然,它们之间有很多差异,我个人觉得[[更容易使用。
做出条件语句的标准方法是什么?如果没有定义标准方法:最好的方法是什么?我必须实现可移植性,而不是可读性或易用性......
对于“Bash 是事实上的标准”的立场是什么?将其用作标准而不仅仅是 POSIX 规则真的安全吗?
[[ .. ]]
Run Code Online (Sandbox Code Playgroud)
sh,如达世币[ .. ]
Run Code Online (Sandbox Code Playgroud)
由于您还询问了个人意见,我的意见是:如果没有理由使用 Bash 特定的方式,请始终尝试遵守 POSIX 标准。
比较字符串
在重击中
[[ "$a" == "$b" ]]
Run Code Online (Sandbox Code Playgroud)
在 POSIX shell 中
[ "$a" = "$b" ]
Run Code Online (Sandbox Code Playgroud)
While 循环条件
在重击中
while [[ "$i" > 0 ]]
Run Code Online (Sandbox Code Playgroud)
在 POSIX shell 中
while [ "$i" -gt 0 ]
Run Code Online (Sandbox Code Playgroud)
虽然 POSIX 似乎更难使用(有时确实如此),但它使您能够将脚本移动到任何 shell 环境,即可移植性。例如,您可以在 Windows 上的Cygwin和任何Linux shell中运行相同的脚本。
我现在意识到,您专门询问了if条件语句,而我所说的也完全适用于该问题。