首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux脚本在两个服务器中的ksh上的行为不同。

Linux脚本在两个服务器中的ksh上的行为不同。
EN

Stack Overflow用户
提问于 2015-02-11 09:40:26
回答 1查看 201关注 0票数 2

下面的代码块来自Linux脚本。它在相同操作系统的不同Linux服务器上提供不同的输出。

代码语言:javascript
复制
SECURE="YES"
if [[ !((-n "$SECURE") && (( "$SECURE" == "YES") || ("$SECURE" == "NO"))) ]]
then        
  echo -e "Validation failed for varilable SECURE: $SECURE"
else
  echo "Validation passed"
fi

服务器-1输出:

可变体安全验证失败:是的

服务器-2输出:

验证通过

不知道为什么输出是不同的。任何有关这方面的细节都会有帮助。谢谢。

更新:我在两台服务器中添加了#!/bin/bash作为第一行,它们给出的输出与“验证通过”相同。

当我添加#!/bin/ksh时,我得到:

服务器-1输出:

可变体安全验证失败:是的

服务器-2输出:

语法错误:`!( ( -n "$SECURE“)&(( "$SECURE”==“是”)\x{e76f}\{e76f}‘$SECURE’== "NO“)

默认情况下,这两个服务器都在使用ksh。调用此命令:

代码语言:javascript
复制
env | grep SHELL 

显示:

代码语言:javascript
复制
SHELL=/bin/ksh

但是为什么输出是不同的呢?

更新2:我发现KSH版本在两台服务器上是不同的。一个服务器有pdksh,另一个有ksh93。有人能告诉我这两种版本的区别吗?

EN

回答 1

Stack Overflow用户

发布于 2016-12-01 12:23:02

我知道这是个老问题但是..。

我认为KSH-93 Frequently Asked Questions - Q17有一个简单的答案。

Q17。什么是pdksh,它与ksh或KornShell相关吗? A17。pdksh是UNIX shell的公共域版本,与ksh无关。它支持大多数1988年的KornShell语言特性和1993年的一些特性。一些KornShell脚本不会与pdksh一起运行。

现在,根据ksh88的手册,te OP的脚本应该可以工作。可能解析器期望操作符之间有空格,甚至他可能发现了一个bug。

无论如何,这在这两个版本(即使在SECURE=""中)中都是有效的:

代码语言:javascript
复制
SECURE="YES"
if [[ "$SECURE" == "YES" || "$SECURE" == "NO" ]]
then
  echo "Validation passed"
else
  echo "Validation failed for varilable SECURE: '$SECURE'"
fi
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28450985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档