2014-02-25 76 views
2

當試圖將變量賦值給另一個變量時,出現了奇怪的錯誤。初始變量值在開始和結束時包含'標誌。KornShell中的變量賦值

下面是代碼:

server = $(uname -n) 
passpre = "'HPre2053#'" 
passmon = "'MonH2053#'" 
mdp="" 

echo ${server} 

if [[ "$server" = "cly1024" ]]; 
then 
    echo "Dentro Pre" 
    mdp = $(passpre) 
    echo $mdp 
    logit "Exécution du script sur Pre. Mot de passe choisi." 
elif [[ "$server" = "pcy4086" ]]; 
then 
    echo "Dentro MON" 
    mdp = ${passmon} 
    logit "Exécution du script sur MON. Mot de passe choisi." 
fi 

代碼錯誤:

cly1024 
Dentro Pre 
modMDPconfig.ksh[51]: passpre: not found 
modMDPconfig.ksh[51]: mdp: not found 

51行是我做的可變分配mdp = $(passpre)

+0

'MDP = $(passpre)'是不是做的任務都沒有。它使用第一個參數'='運行一個命令'mdp',第二個命令運行'passpre'的輸出作爲命令。鑑於此,它給出的錯誤信息完全是對問題的描述。 –

+0

請注意,順便說一句,quotes-as-data(在'「'foo'」中,'''引號是數據,'''引號是語法)永遠不能代替語法引號。你做一個參數擴展,數據**總是**保留數據 - 除非你通過評估階段明確地運行這些數據,否則它不能變成語法,出於安全原因,這樣做是非常糟糕的形式。 –

+0

A 'sh' family **中的變量賦值**必須由包含一個'='符號的單個字符串組成,在左側必須是有效的變量名稱(字母數字+下劃線),右側可以包含任何內容,但空白必須加引號,'''''''''和'''''''引用的正常區別適用。 –

回答

3

這是錯誤的:

var = value 

這是正確的:

var=value 

不要把周圍的=操作空間的分配。


一經校正的形式的這個腳本如下:

server=$(uname -n) 
passpre="'HPre2053#'" 
passmon="'MonH2053#'" 
mdp="" 

echo "$server" 

if [[ "$server" = "cly1024" ]]; then 
    echo "Dentro Pre" 
    mdp=$passpre 
    echo "$mdp" 
    logit "Exécution du script sur Pre. Mot de passe choisi." 
elif [[ "$server" = "pcy4086" ]]; then 
    echo "Dentro MON" 
    mdp=$passmon 
    logit "Exécution du script sur MON. Mot de passe choisi." 
fi