2017-04-05 506 views
0

我想要感受一下Unix,以便我可以在UNIX csh中編寫一個簡短的程序,它使用stdin並返回stdout。所以我寫了下面的代碼:爲什麼在標準輸入和輸出的csh腳本中出現「No Match」錯誤?

echo "TEST" 
    echo -n "Input: " 
    set TEST = "$<" 
    echo $TEST 

不過,我不斷收到,我不能完全弄清楚,當我在某些字符鍵入錯誤。例如,

運行1:沒有問號。正如你所看到的,它完全按照我的意願運行。

edoras ~/As4[199]% ./scriptp1 
     TEST 
     Input: www.google.com/search 
     www.google.com/search 

運行2:帶問號。突然間,有一個「不匹配」的錯誤。

edoras ~/As4[201]% ./scriptp1 
    TEST 
    Input: https://www.google.com/search?criteria 
    echo: No match. 

那麼這個錯誤是什麼,我該如何解決它?因爲對於我必須寫的實際程序,我必須能夠讀取所有特殊字符並打印出他們的ASCII碼。

回答

0

tcshmanual page

除非封閉在'"'或給出的':q'改性劑變量替換的結果可能最終是命令和文件名被取代。

由於變量沒有報價,外​​殼的嘗試文件名替換,因爲你可能沒有匹配在一個名爲www.google.com在當前目錄中名爲https:子目錄下的子目錄search?citeria一個文件,該文件會失敗。 「不匹配」意味着文件名替換失敗。從相同的手動頁面:

它是含有'*''?''[''~',有或沒有'^',不匹配任何文件水珠圖案的誤差。

技術答案在這裏結束。其餘的純粹是基於意見的。

請注意,除非您有特定的充分理由,否則通常認爲在POSIX兼容的shell中編寫腳本更可取,因爲默認情況下csh兼容shell不總是可用。我認爲作爲一個初學者,你應該首先學會在一個兼容POSIX的shell中編寫腳本,並且如果需要的話,只有考慮到csh兼容的shell。

+0

嗨亞歷克斯。我完全可以這樣做,但這是一項任務,無論出於何種原因,我的教授希望我們用C-shell來做。所以我在這件事上沒有發言權。 – Polly

0

Alex在他的回答中是正確的。 「?」是在UNIX中爲特殊命令保留的一系列元字符之一,因此爲了打印它們,我們必須跳過一些我還沒弄明白的箍。但至少現在我知道我爲什麼得到那個輸出。

「?」是一個匹配的命令,所以,就像Alex說的那樣,它試圖將我的輸入與不存在的東西相匹配,而不是打印成沒有特殊價值的普通舊文本字符。

相關問題