我如何才能找出哪个版本的 shell (bash 和/或 ksh) 开始支持 ==

我如何才能找出哪个版本的 shell (bash 和/或 ksh) 开始支持 ==

[[ string1 == string2 ]] 和 [[ string1 = string2 ]] 都表示相等。但是其他人告诉我他们的机器不支持 ==。错误消息是:语法错误:`==' 意外。

看来他们使用的是带有 korn shell 的相当老旧的 UNIX,而我使用的是 REHL5.2。由于我无法访问他们的机器,我如何找出哪个版本开始支持“==”?

谢谢

答案1

您可以查看 的值$SHELL,看看它是否设置为 shell 的可执行文件。然后您可以测试并根据它的值进行分支,或者不进行分支;我不知道这是否会在较旧的 shell 上设置。

如果您不需要高级功能,[[则可以使用[此网页详细解释了这些差异。另请查看这个相关问题

如果您只打算比较字符串,==那么请使用 POSIX 语法以获得最大的兼容性:[ string1 = string2 ]它使用单个等号。

答案2

如果用户实际上使用的是 KSH/Korn shell,问题可能不是==,而是缺少双引号,因为现在许多 AT&T 标准都==按照--posix-o posix标志集采用。(这两个标志强制 KSH 使用 posix 标准)

长话短说,你应该使用: if [ "$instance" = "ALL" ]; then

双引号可以防止出现null或其他empty字符串的情况,即使语法正确,这些情况也很可能会引发错误。

奖金:这并不是说 KSH 缺乏对 的支持,==而是 KSH 缺乏对nullempty对象/返回的支持。

有关更多信息,您可以查看KSH 主页或 Peter Seebach 的书可移植的 Shell 脚本甚至O'Reilly Bash 食谱,最后是O'Reilly 撰写的《Korn Shell》一书我偶然发现了一些逻辑操作数的可自由访问的短链接这里:)

相关内容