首页 > 解决方案 > 如何在c-shell中将特殊字符作为参数传递

问题描述

#!/bin/csh -f
set rule = $1
echo 
echo $rule

当我执行这个小脚本时:

<script1.csh> "test"
test

<script1.csh> "who?"
set:No match

我的问题是如何制作“?” 作为c-shell中参数j的一部分?非常感谢您的帮助霍华德

标签: csh

解决方案


您必须添加引号:

#!/bin/csh -f
set rule = "$1"
echo
echo "$rule"

csh(以及 Bourne shell)中变量的工作方式与常规编程语言并不完全相同,而更像是一种“宏语言”;也就是说,一个类似于$1or的变量$rule被简单地替换为内容,而不是解释为一个特殊的变量。

所以set rule = $1就像你输入了一样set rule = who?。为避免出现问题,您通常应始终引用变量。

(确切的规则比上面描述的要复杂一些,但这是一种有用的思考方式)。


推荐阅读