我有一个csh脚本,使用"source"执行,并将所有参数传递给程序:
% alias foo source foo.csh
% cat foo.csh
./bar $*
# Some uninteresting stuff
如果我运行source foo.csh a b c
,一切都没问题。但并非总是如此:
foo "a b" "c d"
:
我期望bar
得到两个参数-a b
和c d
,但它获得了4个参数。foo a "*" b
: 星号*
被扩展为文件列表,而我只想要字符*
。
额外加分-foo a * b
应该以同样的方式工作。我知道这更有问题,我愿意不用它。
我尝试过的一件事是将./bar $*
更改为./bar "$*"
。这可以解决星号问题,但现在bar
总是收到单个参数中的所有内容。
注:
我们公司使用csh作为登录shell,因此在使用
source
时必须使用它。知道csh编程被认为是有害的,我在bar
中实现了所有逻辑,并将最少量的逻辑留在脚本中。如果您建议重新定义别名,那么重要的是要看到重定向仍然有效(
foo | grep hello
),并且如果ctrl-C打断脚本,则有适当的清除。