在bash中将别名作为参数传递

时间:2013-12-06 14:07:27

标签: bash calendar alias

您可以使用内置命令cal,例如:

cal 10 2013

您将获得2013年10月的日历。我的老师制作并指定以某种方式更改第一个参数,我们可以用我们的母语调用此函数。例如:

cal spalis 2013
cal gruodis 1999

等等.. (spalis意为十月,gruodis - 十二月在我的国家) 我们会看到与cal 10 2013或cal gruodis 1999相同的结果

与其他月相同。我是shell的新手,并且认为我可以创建一个别名:

alias spalis=10

然后我尝试使用cal spalis 2013,但我收到了错误:

cal: spalis is neither a month number (1..12) nor a name

所以,谷歌搜索了一段时间后,我想有没有办法传递别名作为参数?或者我做错了什么?也许有其他方式?我会非常感谢你的建议,对不好的英语抱歉:)

2 个答案:

答案 0 :(得分:2)

cal接受当前语言环境指定语言的月份名称。要接受立陶宛月份名称,请使用

$ LANG=lt_LT cal spalis 2013
Spalio 2013
Sk Pr An Tr Kt Pn Št
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

这取决于您使用的cal版本。以上工作在我的MacOS X 10.9机器上,但不在我的一个Linux机器上(cal根本不接受月份名称,只有数字)。

这可能不是您老师正在寻找的,因为它只需要按预期使用该程序。 :)

答案 1 :(得分:1)

别名仅适用于命令名称,不适用于参数。你要做的是编写一个函数cal,它用适当的数字替换第一个参数,然后调用常规cal二进制文件。

cal() {
    local month=$1
    local year=$2

    # replace named $month with a numeric $month here
    ...

    # Call the real cal. `command' ignores this function and calls the underlying binary.
    command cal "$month" "$year"
}