我们可以在tcsh别名中使用可选参数吗?

时间:2014-02-23 20:55:08

标签: arguments alias tcsh optional

我有以下别名

alias ackalias "acknoredirect !:2-$ '^[\sun]alias.?(!:1)' ~/.alias"

问题是,如果我ackalias tmux,它就不起作用;它总是需要2个或更多的参数。例如,以下内容效果很好:ackalias tmux -A 2 -B 2

是否有可能在别名定义中替换!:$ $,其中第二个和更多参数是可选的?

更新
@Mark正如您所建议的那样,我尝试了以下简单示例,并在有2个或更多可选参数时发现问题。请查看以下示例:

alias test2 'echo \!:1* \!:2* \!:3* \!:4*' test2 a test2 a b test2 a b c test2 a b c d test2 a b c d e

输出结果为:

a a b b a b c b c c a b c d b c d c d d a b c d e b c d e c d e d e

我可能需要添加条件,但最终应该有效。感谢。

2 个答案:

答案 0 :(得分:1)

alias ackalias "acknoredirect \!:2* '^[\sun]alias.?(\!:1)' ~/.alias"

(注意我还在!' s之前添加了转义符)

答案 1 :(得分:0)

最后这个有用了!

alias test4 'set arg1 = `echo \!:1* | awk '"'"'{ print $1 }'"'"'`; \\ echo -n "Arg num 1 = $arg1 "; \\ set arg2 = `echo \!:2* | awk '"'"'{ print $1 }'"'"'`; \\ echo -n "Arg num 2 = $arg2 "; \\ set arg3 = `echo \!:3* | awk '"'"'{ print $1 }'"'"'`; \\ echo -n "Arg num 3 = $arg3 "; \\ set arg4 = `echo \!:4* | awk '"'"'{ print $1 }'"'"'`; \\ echo -n "Arg num 4 = $arg4 "; \\ set arg5 = `echo \!:5* | awk '"'"'{ print $1 }'"'"'`; \\ echo -n "Arg num 5 = $arg5 "; \\ echo ""; \\ ' test4 abc test4 abc def ghi test4 abc def ghi jkl test4 abc def ghi jkl mno test4 abc def ghi jkl mno pqr 我很快就需要开始转换为zsh ..