%20%E5%BC%80%E5%A7%8B%E6%94%AF%E6%8C%81%20%3D%3D.png)
[[ 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 缺乏对null
和empty
对象/返回的支持。
有关更多信息,您可以查看KSH 主页或 Peter Seebach 的书可移植的 Shell 脚本甚至O'Reilly Bash 食谱,最后是O'Reilly 撰写的《Korn Shell》一书我偶然发现了一些逻辑操作数的可自由访问的短链接这里:)