我有一个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破坏了脚本,那么正确的清理。
感谢。
答案 0 :(得分:18)
与此同时,我自己也找到了答案:
./bar $argv:q
:q
修饰符负责处理事情。它传递给bar
完全相同的参数foo
。
来源:http://www.staff.tugraz.at/reinfried.o.peter/unix/cshell.html