问题描述
#!/bin/csh -f
set rule = $1
echo
echo $rule
当我以以下方式执行这个小脚本时:
<script1.csh> "test"
test
<script1.csh> "who?"
set:No match
我的问题是我该怎么做“?”作为c-shell中argumentsj的一部分? 非常感谢您的帮助 霍华德
解决方法
您必须添加引号:
#!/bin/csh -f
set rule = "$1"
echo
echo "$rule"
csh(以及Bourne shell)中变量的工作方式与常规编程语言并不完全相同,而更多地是作为“宏语言”使用的;也就是说,像$1
或$rule
这样的变量很容易被内容替换,而不是被解释为特殊变量。
因此set rule = $1
与输入set rule = who?
相同。为了避免出现问题,通常应该总是引用变量。
(确切的规则比上面描述的要复杂一些,但这是思考问题的有用方法)。