下面的代码块来自Linux脚本。它在相同操作系统的不同Linux服务器上提供不同的输出。
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。调用此命令:
env | grep SHELL 显示:
SHELL=/bin/ksh但是为什么输出是不同的呢?
更新2:我发现KSH版本在两台服务器上是不同的。一个服务器有pdksh,另一个有ksh93。有人能告诉我这两种版本的区别吗?
发布于 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=""中)中都是有效的:
SECURE="YES"
if [[ "$SECURE" == "YES" || "$SECURE" == "NO" ]]
then
echo "Validation passed"
else
echo "Validation failed for varilable SECURE: '$SECURE'"
fihttps://stackoverflow.com/questions/28450985
复制相似问题