# 脚本的返回值或者运行结果
一般情况下,很多命令将一般信息打印到标准输出(STDOUT),将错误打印到标准错误输出(STDERR)。通常脚本会有返回码,这样就比较方便的控制和监控脚本运行情况。返回0代表运行成功,其他表示运行有错误,所以上节里的常用变量*$?*就表示上个命令返回的返回码。当然也可以直接在调用命令的地方,将脚本的返回值做一些二进制的运算,例子如下;
```bash
false || echo "Oops, fail"
# Oops, fail
true || echo "Will not be printed"
#
true && echo "Things went well"
# Things went well
false && echo "Will not be printed"
```
另外还有一种情况是将命令得到的结果作为变量。把调用命令放到这个里面,$( cmd ),即cmd的位置,等脚本运行的时候,命令运行的结果就会被替换到这个位置。举个例子,比如这样一句脚本:
```bash
for file in $(ls)
```
这条脚本会先运行ls命令,然后再遍历所有通过ls找到的所有文件,再进行相关操作。
还有一个类似的秘术,即 *< (cmd)* ,他的做法是,先运行命令,然后将运行结果放到临时文件,然后在刚才cmd的位置上,将临时文件的整个路径将cmd替换掉。比如命令:``diff <(ls foo) <(ls bar)`` 将会显示在foo,bar两个命令下面文件的不同情况。