2017-04-05 501 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说的那样,它试图将我的输入与不存在的东西相匹配,而不是打印成没有特殊价值的普通旧文本字符。

相关问题