从csh传递参数给程序,确保参数不被修改

12

我有一个csh脚本,使用"source"执行,并将所有参数传递给程序:

% alias foo source foo.csh
% cat foo.csh
./bar $*
# Some uninteresting stuff

如果我运行source foo.csh a b c,一切都没问题。但并非总是如此:

  1. foo "a b" "c d"
    我期望bar得到两个参数-a bc d,但它获得了4个参数。

  2. foo a "*" b: 星号*被扩展为文件列表,而我只想要字符*
    额外加分-foo a * b应该以同样的方式工作。我知道这更有问题,我愿意不用它。

我尝试过的一件事是将./bar $*更改为./bar "$*"。这可以解决星号问题,但现在bar总是收到单个参数中的所有内容。

注:

  1. 我们公司使用csh作为登录shell,因此在使用source时必须使用它。知道csh编程被认为是有害的,我在bar中实现了所有逻辑,并将最少量的逻辑留在脚本中。

  2. 如果您建议重新定义别名,那么重要的是要看到重定向仍然有效(foo | grep hello),并且如果ctrl-C打断脚本,则有适当的清除。

1个回答

23

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接