新技术论坛
搜索
查看: 600|回复: 0
打印 上一主题 下一主题

shell教程之六 命令替换

[复制链接]
  • TA的每日心情

    2016-7-1 19:50
  • 签到天数: 81 天

    连续签到: 1 天

    [LV.6]常住居民II

    扫一扫,手机访问本帖
    楼主
    跳转到指定楼层
    发表于 2016-3-13 15:07:10 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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




    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    手机版|Archiver|开发者俱乐部 ( ICP/ISP证:辽B-2-4-20110106号 IDC证:辽B-1-2-20070003号 )

    GMT+8, 2024-12-23 09:18 , Processed in 0.117789 second(s), 22 queries .

    X+ Open Developer Network (xodn.com)

    © 2009-2017 沈阳讯网网络科技有限公司

    快速回复 返回顶部 返回列表