下面的代码块来自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
Server-1输出:
可变量安全验证失败:是
Server-2输出:
验证通过
不确定为什么输出不同。任何有关此的细节都会有所帮助。感谢。
更新:
我在两个服务器中添加了#!/bin/bash
作为第一行,并且它们提供了与#34相同的输出;验证通过"。
当我添加#!/bin/ksh
时,我得到:
Server-1输出:
可变量安全验证失败:是
Server-2输出:
语法错误:`!(( - n" $ SECURE")&&((" $ SECURE" ==" YES")|| (" $ SECURE" ==" NO")))'缺少表达式运算符
默认情况下,两台服务器都使用ksh。调用此命令:
env | grep SHELL
所示:
SHELL=/bin/ksh
但为什么输出不同?
更新2: 我发现KSH版本在两台服务器上有所不同。一台服务器有pdksh而另一台服务器有ksh93。任何人都可以告诉我这两个版本之间的区别吗?
答案 0 :(得分:0)
我知道这是一个老问题,但是......
我认为KSH-93 Frequently Asked Questions - Q17
有一个简短的答案。
Q17。什么是pdksh,是否与ksh或KornShell有关?
A17。 pdksh是UNIX shell的公共域版本 与ksh无关。它支持1988年KornShell语言的大部分内容 功能和1993年的一些功能。 一些KornShell脚本会 不能用pdksh 运行。
现在,根据ksh88的手册,te OP的脚本应该有效。也许解析器期望运营商之间的空间,甚至他可能发现了一个错误。
无论如何,这应该适用于两个版本(即使使用SECURE=""
):
SECURE="YES"
if [[ "$SECURE" == "YES" || "$SECURE" == "NO" ]]
then
echo "Validation passed"
else
echo "Validation failed for varilable SECURE: '$SECURE'"
fi