2013-04-09 81 views
1

我正在为用户输入他们想要查看的月份和年份的开头的unix/linux类写入bash脚本。我不确定如何根据用户输入执行日历。在Linux中执行cal函数给定的月份和年份

这是我的。

#!/bin/bash 
echo -n "Enter the month you wish displayed: "; read month 
echo -n "Enter the year you wish displayed: "; read year 
echo cal '$month' '$year' 
+2

只需'cal $ month $ year'应该已经足够了,没有'echo'也没有'''包装变量。 – fedorqui 2013-04-09 23:06:10

+2

'''防止shell扩展变量('$')。带他们出去。另外 - 你想运行'cal',而不是'echo'它。所以'cal $ month $ year'就是它所需要的。 – Floris 2013-04-09 23:06:11

+1

术语质疑:'cal'是一个命令,而不是一个函数。 – 2013-04-09 23:08:35

回答

1

当使用echo,该行的其余部分(由壳可能的处理之后)获取输出来stdout(或可能管道输送到下一工序)。这可以防止将cal视为命令。

在'nix:"双引号和'单引号中使用了不同种类的引号。还有`倒钩。每个都有非常具体的用途。

反引号包围的任何命令是扩展内联 - 也就是说,它被执行并且输出放在行中。因此,

echo hello `whoami` 

将导致hello john如果您的用户名(响应whoami命令)是john

单引号具有相反的效果:它可以“保护”shell中的任何文本,因此不会再进行任何处理。因此

echo hello '`whoami`' 

将导致

hello '`whoami`' 

双引号"是有点限制较少。 $(变量),\(转义)和`反向符号仍然被解释,但它是一个将其中的空间参数传递给脚本的好方法。因此

doSomething for me 

将两个参数传递给该函数doSomethingfor,并me。在另一方面

doSomething "for me" 

只通过一个单一的参数,for me

我希望这个澄清的东西给你。