2015-06-27 38 views
1

的代碼:爲什麼後綴「 n」在TCL/expect腳本中添加雙引號?

exp_send $pass"\n" 

發送通變量值,隨後雙引號,換行符然後雙引號。

我想知道爲什麼?

如果我不想要雙引號發送,它應該如何編碼?

+4

在Tcl中,如果雙引號出現在單詞的開頭和結尾,則只有雙引號「quote」。它們比普通文本更特別,但在您的調用中,引號將成爲傳輸文本的一部分。如果你只是省略雙引號,你應該得到你想要的 - 或者不必要的,你可以將第一個引號字符移到美元符號之前。 –

+0

這聽起來正確。謝謝! – paolov

+0

你能鏈接到一個例子嗎?這偶爾會引起混淆,所以我可能會寫一個稍後討論它的答案。 (我不知道那裏發生了什麼,我回答了一條評論,似乎不再在這裏了)。 –

回答

3

這是由於Tcl的general syntax rules。特別是,"字符僅適用於單詞的開頭(或在{*}之後,此處不適用)。當它不在單詞的開始(和匹配結束)時,它並不特別。

這意味着,在:

exp_send $pass"\n" 

第二個字包括的pass變量,文字",換行,而另一個字面"的內容的並置的。它的只是規則的應用。

要解決,您可以使用其中的一個:

exp_send "$pass\n" 
exp_send $pass\n 
exp_send $pass "\n" 

;三是其他兩個不同的;它給了exp_send兩個參數,而不是一個。前兩個選項在行爲上相同,並在內部編譯爲相同的字節碼序列。

+0

不幸的是,第三個錯誤是:'exp_send'只需要(-flags和)一個字符串 –

+1

啊,但這會是一個_command-specific_錯誤,而不是一般的Tcl語法錯誤。完全不同! ;-) –