为什么我在标准输入和输出的csh脚本中出现“No Match”错误?

时间:2017-04-05 21:19:35

标签: unix csh

我试图了解Unix,以便我可以在UNIX csh中编写一个带有stdin并返回stdout的短程序。所以我写了下面的代码:

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代码。

2 个答案:

答案 0 :(得分:1)

来自tcsh manual page

  

除非附在'"'':q'修饰符中,否则变量替换的结果最终可能是命令和文件名替换。

由于未引用变量,因此shell会尝试进行文件名替换,因为您可能在名为{{1}的子目录中名为search?citeria的子目录中没有匹配www.google.com的文件在当前目录中。 “不匹配”表示文件名替换失败。从同一手册页:

  

对于包含https:'*''?''['的全局模式,包含或不包含'~',这是一个错误,不是匹配任何文件。

技术答案在此结束。其余的纯粹基于意见。

请注意,除非您有特殊的理由,否则通常认为在兼容POSIX的shell中编写脚本更为可取,因为'^'兼容的shell默认情况下并不总是可用。我认为作为一个初学者,你应该首先学习在兼容POSIX的shell中编写脚本,然后只在需要时考虑csh兼容的shell。

答案 1 :(得分:0)

亚历克斯的答案是正确的。 “?”是UNIX中为特殊命令保留的一系列元字符之一,所以为了打印它们,我们必须跳过一些我尚未想到的箍。但至少现在我知道为什么我会得到那个输出。

“?”是一个匹配的命令,所以,像亚历克斯所说,它试图将我的输入与不存在的东西相匹配,而不是打印出一个没有特殊价值的普通旧文本字符。