shell函数问题

初学shell函数,
在shell中定义如下函数:
foo() { echo "hello"; }
****************
如下调用:
$`foo`
出错,
$y=`foo`
$echo $y
hello
请问单独调用`foo`为什么会报错呢?

作者: lmm2003   发布时间: 2011-02-05

你首先要让shell能够定位到foo所在的函数文件

方法是: . /<foo所在的函数文件路径>

之后才可以在命令行方式下调用

作者: Wind_Runner   发布时间: 2011-02-06

直接运行foo就可以了,

作者: masmaster   发布时间: 2011-02-06

纯粹是按自己的臆想在那乱搞。

$`foo`
出错,
$y=`foo`
$echo $y
--------
我要向你反问一个问题
1。同样是调用为什么前面用$`foo` 后面用`foo` ! 明显前面$`foo`是错的!

好了,解释一下
如果你直接
`foo`
这样就是调用函数了 简单的脚本就是这样 
#!/bin/sh
foo() { echo "hello"; }
`foo`

可是foo函数的返回值是hello 那么上面调用函数的地方就变成了hello
#!/bin/sh
foo() { echo "hello"; }
hello

这下可好了 脚本会把hello当成命令来执行! 可是你认为你的系统会有hello这个命令吗?!
自然脚本回报找不到hello这个命令! 如果你把hello换成系统存在的命令 这个脚本是会执行成功的。

而你的第二种方法
$y=`foo`
这样直接把foo的返回值赋给变量y了 当然没有问题了
然后你又
echo $y
这样会输出变量y的值 会输出hello

同理 既然你知道用echo 为什么在第一种调用里 你不用echo `foo`呢 同样会执行成功!


刚开始学习shell的时候 最好不要按自己的想法去乱来 一定要找个基础教程 一边学一边练
等你有一定基础的时候 在一步一步的去深入研究!
推荐一个教程http://www.linuxsir.org/main/doc/abs/abs3.7cnhtm/index.html

作者: steptodream   发布时间: 2011-02-06