假設您需要列出遠程 home 目錄中所有的 C 源文件。在本地的情況下,您可能會輸入像 ls -l *.c 這樣的命令,所以您可以在 ssh 中嘗試該方法:
可能會出現兩種情況:如果在本地計算機的當前工作目錄中不存在任何 C 文件,那麼 Shell 將返回 zsh: no matches found: *.c;或者,如果當前工作目錄中存在一些 C 文件,而它們在遠程計算機的 home 目錄中卻不存在,那麼遠程計算機的 Shell 可能會返回 ls: whosit.c: No such file or directory。您是不是被弄糊塗了?
問題在於,在發送 ssh 命令之前,本地 Shell 將首先展開 通配符 *。而您所希望的是,在遠程系統中展開這個 *。
要實現這一點,您必須阻止本地 Shell 對通配符進行解釋(前面曾出現過一次這樣的情況)。您可以將 * 放到單引號中,或使用反斜槓 (\) 對星號進行轉義。這樣一來,會將星號作為常規字符傳遞到遠程 Shell,並在遠程計算機的上下文中對其進行解釋。
這裡有兩種不同的方法,可以根據實際情況選擇使用合適的方法