执行结果其实不相同, 假设包含“echo “Usage:`basename $0` [start|stop|help]” >&2”的脚本文件名称为usebase.sh,当执行 bash usebase.sh > outfile.txt 时,echo的内容不会存进 outfile.txt ,而是显示在屏幕(缺省情况下),因为这里echo的内容是没有正确使用该命令脚本的提示,必须让使用者看到,所以定向到stderr。
去掉">&2",在执行bash usebase.sh > outfile.txt,即使usebase.sh这个脚本使用的格式不对,也不会输出到屏幕,使用者也就不知道自己出错了。所以要加上">&2"。
个人认为,这里是没有必要加这个的,echo命令基本不会出错。
>&2 其实>前面省略了1(stdout),应该是将 stderr 并进stdout 一起输出。
譬如:
ret=`ls 一个不存在的文件`
echo $ret #这样看不到任何信息,因为默认只输出stdout
ret=`ls 一个不存在的文件 >&2`
echo $ret #这样可以看到错误信息,因为stderr并入stdout了
>&2 也就是把结果输出到和标准错误一样;之前如果有定义标准错误重定向到某file文件,那么标准输出也重定向到这个file文件。
&> 连起来的吧,表示无论对错都定向输出到2, 2是标准出错