[size=1.166em]如果将一个命令放在 $(和 )之间或一对重音符 `之间,您可以将该命令的输出替换为另一个命令的输入。这种技术称为 命令替换。在需要嵌套命令替换时,可以采用 $()的形式。这种形式也使确定发生的情况变得更容易,因为圆括号有左右之分,但两个重音符是相同的。选择权在您手上,而且重音符仍然很常见。 [size=1.166em]我们常常将命令替换与循环结合使用(将在后面的 “循环” 教程中介绍)。但是,您还可以使用它来稍微简化 myorder函数。因为 shopt -p nocasematch打印您需要将 nocasematch选项设置为其当前值的命令,所以您只需保存该输出,然后在 case语句的末尾执行它。通过这么做,您会恢复 nocasematch选项,无论您是否更改了它。修改后的函数现在可能类似于 清单 21。请自行尝试它。 清单 21. 使用命令替换而不是返回值测试- ian@attic-u15:~$ type myorder
- myorder is a function
- myorder ()
- {
- local restorecase=$(shopt -p nocasematch) rc=0;
- shopt -s nocasematch;
- case "$*" in
- "coffee" | "decaf")
- echo "Hot coffee coming right up"
- ;;
- "tea")
- echo "Hot tea on its way"
- ;;
- "soda")
- echo "Your ice-cold soda will be ready in a moment"
- ;;
- *)
- echo "Sorry, we don't serve that here";
- rc=1
- ;;
- esac;
- $restorecase;
- return $rc
- }
- ian@attic-u15:~$ shopt -p nocasematch
- shopt -u nocasematch
- ian@attic-u15:~$ myorder DECAF
- Hot coffee coming right up
- ian@attic-u15:~$ myorder TeA
- Hot tea on its way
- ian@attic-u15:~$ shopt -p nocasematch
- shopt -u nocasematch
复制代码
|