【发布时间】:2013-06-05 04:21:10
【问题描述】:
我有一个 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 programming is considered harmful,我在bar中实现了所有逻辑,并在脚本中保留了最低限度。如果您建议重新定义别名,重要的是要看到重定向仍然有效 (
foo | grep hello),并且如果 ctrl-C 破坏了脚本,则会进行适当的清理。
【问题讨论】: