下面的代碼塊來自Linux腳本。它在具有相同OS的不同Linux服務器上提供不同的輸出。Linux腳本在兩臺服務器上的ksh上表現不同
SECURE="YES"
if [[ !((-n "$SECURE") && (("$SECURE" == "YES") || ("$SECURE" == "NO"))) ]]
then
echo -e "Validation failed for varilable SECURE: $SECURE"
else
echo "Validation passed"
fi
服務器-1輸出:
Validation failed for varilable SECURE: YES
服務器2輸出:
Validation passed
不知道爲什麼輸出是不同的。有關這方面的任何細節都會有幫助。謝謝。
更新: 我在兩臺服務器中都添加了#!/bin/bash
作爲第一行,它們的輸出與「驗證通過」相同。
當我添加#!/bin/ksh
我得到:
服務器-1輸出:
Validation failed for varilable SECURE: YES
服務器2輸出:
syntax error: `!((-n "$SECURE") && (("$SECURE" == "YES") || ("$SECURE" == "NO")))' missing expression operator
默認情況下的兩臺服務器都使用KSH。調用此命令:
env | grep SHELL
顯示:
SHELL=/bin/ksh
但是爲什麼輸出有什麼不同?
更新2: 我發現KSH版本在兩臺服務器上有所不同。一臺服務器有pdksh,另一臺有ksh93。任何人都可以告訴我兩個版本之間的區別嗎?
如果添加後'的空間會發生什麼'? – choroba 2015-02-11 09:59:30
您應該在兩臺服務器上得到相同的答案。也許是一個錯字?使用'#!/ bin/bash' shebang將其作爲腳本,將其複製到服務器,並且它應該可以工作。你的邏輯真的很複雜:爲什麼不簡單地使用'if [[$ SECURE = @(YES | NO)]];然後回顯「驗證通過」; else printf'變量驗證失敗SECURE:%q \ n'「$ SECURE」; fi'? – 2015-02-11 10:04:52
你有沒有檢查版本,它們在兩臺服務器上都是一樣的嗎? – alijandro 2015-02-11 10:56:20