11

我有一个使用“源”执行的 csh 脚本,并将其所有参数传递给程序:

% 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 破坏脚本,则进行适当的清理。

4

1 回答 1

21

同时,我自己也找到了答案:

./bar $argv:q

:q修饰符负责处理事情。它传递给bar得到的完全相同的参数foo

资料来源: http: //www.staff.tugraz.at/reinfried.o.peter/unix/cshell.html

于 2013-06-09T11:13:28.543 回答