的代碼:爲什麼後綴「 n」在TCL/expect腳本中添加雙引號?
exp_send $pass"\n"
發送通變量值,隨後雙引號,換行符然後雙引號。
我想知道爲什麼?
如果我不想要雙引號發送,它應該如何編碼?
的代碼:爲什麼後綴「 n」在TCL/expect腳本中添加雙引號?
exp_send $pass"\n"
發送通變量值,隨後雙引號,換行符然後雙引號。
我想知道爲什麼?
如果我不想要雙引號發送,它應該如何編碼?
這是由於Tcl的general syntax rules。特別是,"
字符僅適用於單詞的開頭(或在{*}
之後,此處不適用)。當它不在單詞的開始(和匹配結束)時,它並不特別。
這意味着,在:
exp_send $pass"\n"
第二個字包括的pass
變量,文字"
,換行,而另一個字面"
的內容的並置的。它的只是規則的應用。
要解決,您可以使用其中的一個:
exp_send "$pass\n"
exp_send $pass\n
exp_send $pass "\n"
;三是其他兩個不同的;它給了exp_send
兩個參數,而不是一個。前兩個選項在行爲上相同,並在內部編譯爲相同的字節碼序列。
不幸的是,第三個錯誤是:'exp_send'只需要(-flags和)一個字符串 –
啊,但這會是一個_command-specific_錯誤,而不是一般的Tcl語法錯誤。完全不同! ;-) –
在Tcl中,如果雙引號出現在單詞的開頭和結尾,則只有雙引號「quote」。它們比普通文本更特別,但在您的調用中,引號將成爲傳輸文本的一部分。如果你只是省略雙引號,你應該得到你想要的 - 或者不必要的,你可以將第一個引號字符移到美元符號之前。 –
這聽起來正確。謝謝! – paolov
你能鏈接到一個例子嗎?這偶爾會引起混淆,所以我可能會寫一個稍後討論它的答案。 (我不知道那裏發生了什麼,我回答了一條評論,似乎不再在這裏了)。 –