我试图了解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代码。
答案 0 :(得分:1)
来自tcsh
manual page:
除非附在
'"'
或':q'
修饰符中,否则变量替换的结果最终可能是命令和文件名替换。
由于未引用变量,因此shell会尝试进行文件名替换,因为您可能在名为{{1}的子目录中名为search?citeria
的子目录中没有匹配www.google.com
的文件在当前目录中。 “不匹配”表示文件名替换失败。从同一手册页:
对于包含
https:
,'*'
,'?'
或'['
的全局模式,包含或不包含'~'
,这是一个错误,不是匹配任何文件。
技术答案在此结束。其余的纯粹基于意见。
请注意,除非您有特殊的理由,否则通常认为在兼容POSIX的shell中编写脚本更为可取,因为'^'
兼容的shell默认情况下并不总是可用。我认为作为一个初学者,你应该首先学习在兼容POSIX的shell中编写脚本,然后只在需要时考虑csh
兼容的shell。
答案 1 :(得分:0)
“?”是一个匹配的命令,所以,像亚历克斯所说,它试图将我的输入与不存在的东西相匹配,而不是打印出一个没有特殊价值的普通旧文本字符。