在新脚本中使用Bash4功能安全吗?

在新脚本中使用Bash4功能安全吗?,bash,portability,Bash,Portability,Bash4提供了一些很好的特性,比如globstar、关联数组、内置映射文件等 如果我使用这些特性,会不会大大降低脚本的可移植性?坚持使用Bash 3是否更安全?取决于您希望的便携性 苹果没有在MacOSX上发布Bash4,因为Bash4使用GPLv3。当然,用户可以自己安装,但大多数用户不会安装 如果您想移植到OSX,您可能不应该依赖Bash4特性。然而,如果您不介意只移植到现代GNU/Linux发行版,那么几乎所有的发行版都包括Bash4,所以您也可以依赖它们 另外,请记住,并非所有操作系统

Bash4提供了一些很好的特性,比如globstar、关联数组、内置映射文件等


如果我使用这些特性,会不会大大降低脚本的可移植性?坚持使用Bash 3是否更安全?

取决于您希望的便携性

苹果没有在MacOSX上发布Bash4,因为Bash4使用GPLv3。当然,用户可以自己安装,但大多数用户不会安装

如果您想移植到OSX,您可能不应该依赖Bash4特性。然而,如果您不介意只移植到现代GNU/Linux发行版,那么几乎所有的发行版都包括Bash4,所以您也可以依赖它们

另外,请记住,并非所有操作系统都默认提供bash。例如,OpenBSD默认提供pdksh,您需要显式安装Bash。Debian提供bash,但是
/bin/sh
是Dash,所以您需要显式地使用
#/bin/bash
如果您想选择bash特定功能


如果您真的想要可移植性,那么应该坚持使用POSIX/Single Unix规范特性。但是,如果您只需要在最新的GNU/Linux发行版(甚至是几年前的发行版)上运行,那么使用
/bin/bash
并假设它是Bash4就可以了。

取决于您希望的可移植性

苹果没有在MacOSX上发布Bash4,因为Bash4使用GPLv3。当然,用户可以自己安装,但大多数用户不会安装

如果您想移植到OSX,您可能不应该依赖Bash4特性。然而,如果您不介意只移植到现代GNU/Linux发行版,那么几乎所有的发行版都包括Bash4,所以您也可以依赖它们

另外,请记住,并非所有操作系统都默认提供bash。例如,OpenBSD默认提供pdksh,您需要显式安装Bash。Debian提供bash,但是
/bin/sh
是Dash,所以您需要显式地使用
#/bin/bash
如果您想选择bash特定功能


如果您真的想要可移植性,那么应该坚持使用POSIX/Single Unix规范特性。但是,如果您只需要在最新的GNU/Linux发行版(甚至是几年前的发行版)上运行,使用
/bin/bash
并假设它是bash4应该可以。我想这取决于你的目标操作系统-如果你使用
bash4
,你就排除了所有的苹果操作系统X盒,因为苹果没有超越
bash3.2
。我真的不知道如何回答这个问题,除非用“它取决于”这个短语。我想这取决于什么你的目标操作系统-如果你使用
bash4
,你就排除了所有的苹果OS X框,因为苹果还没有超越
bash3.2
。我真的不明白如何回答这个问题,除了用它所依赖的短语之外……我还建议,Python 2.X或Perl可以作为*nix系统的通用语言——你在OS X上有介绍还有我能想到的每一个Linux发行版。对于真正的可移植性,无论如何,Python似乎比Bash更适合,因为Bash脚本在主机系统中需要更多的外部命令,因此如果想要真正的可移植性,就必须使用POSIX,这确实是一个限制。(当然,有时Bash仍然是更好的工具。)@IvanX Python不包括在Arch Linux中,如果您安装了它,
/usr/bin/Python
是Python 3,而不是Python 2(您需要明确地将其称为
python2
)。看起来像。像OpenWRT这样的嵌入式Linux通常在其基本发行版中不包括这两个版本。如果您想要真正的可移植性,POSIX
sh
就是一条出路。如果没有,请使用您喜欢的任何一种,因为几乎所有平台上的包repos都提供了所有的包repos。不过,如果不是针对嵌入式Linux,就有Perl。当我使用POSIX
sh
时,我总是觉得自己束手无策,但你的观点肯定是正确的。我还建议Python2.x或Perl作为跨*nix系统的通用语言——OS x和我能想到的每一个Linux发行版都涵盖了你。对于真正的可移植性,无论如何,Python似乎比Bash更适合,因为Bash脚本在主机系统中需要更多的外部命令,因此如果想要真正的可移植性,就必须使用POSIX,这确实是一个限制。(当然,有时Bash仍然是更好的工具。)@IvanX Python不包括在Arch Linux中,如果您安装了它,
/usr/bin/Python
是Python 3,而不是Python 2(您需要明确地将其称为
python2
)。看起来像。像OpenWRT这样的嵌入式Linux通常在其基本发行版中不包括这两个版本。如果您想要真正的可移植性,POSIX
sh
就是一条出路。如果没有,请使用您喜欢的任何一种,因为几乎所有平台上的包repos都提供了所有的包repos。不过,如果不是针对嵌入式Linux,就有Perl。当我使用POSIX
sh
时,我总是觉得自己束手无策,但当然,你的观点是正确的。