本文所选的例子来自于《Advanced Bash-scripting Gudie》一书,译者 杨春敏 黄毅

Example 4-7 使用shift

#!/bin/bash
#使用shift来通过所有的位置参数
until [ -z "$1" ]
do
   echo -n "$1"
   shift
done

exit 0

脚本运行结果

关于shift

1.shift命令用于对参数的左移,通常在不知道参数个数的情况下依次遍历每个参数进行相应处理。

2.示例1:依次读取输入的参数并打印参数的个数

run.sh

#!/bin/bash
while [ $# != 0 ]
do
   echo "第一个参数为: $1,参数个数为: $#"
   shift
done

输入如下命令运行:run.sh a b c d e f

结果显示如下:

第一个参数为:a,参数个数为:6
第一个参数为:b,参数个数为:5
第一个参数为:c,参数个数为:4
第一个参数为:d,参数个数为:3
第一个参数为:e,参数个数为:2
第一个参数为:f,参数个数为:1

从上可知 shift(shift 1)命令每执行一次,变量的个数($#)减一(之前的$1变量被销毁,之后的$2就变成了$1),而变量值提前一位。
同理,shift n后,前n位参数都会被销毁。

输入5个参数: abcde
那么$1=a,$2=b,$3=c,$4=d,$5=e,执行shift 3操作后,前3个参数a、b、c被销毁,就剩下了2个参数:d,e(这时d=$1,e=$2,其中d由$4—>$1,e由$5—>$2),参考示例如下:
示例2:

 #!/bin/bash
    echo "参数个数为:$#,其中:"
    for i in $(seq 1 $#)
    do
      eval j=\$$i
      echo "第$i个参数($"$i"):$j"
    done  

    shift 3  

    echo "执行shift 3操作后:"
    echo "参数个数为:$#,其中:"
    for i in $(seq 1 $#)
    do
      #通过eval把i变量的值($i)作为变量j的名字
      eval j=\$$i
      echo "第$i个参数($"$i"):$j"
    done  

输出结果为:

参数个数为:5,其中:
第1个参数($1):a
第2个参数($2):b
第3个参数($3):c
第4个参数($4):d
第5个参数($5):e
执行shift 3操作后:
参数个数为:2,其中:
第1个参数($1):d
第2个参数($2):e

示例来源:http://blog.csdn.net/zhu_xun/article/details/24796235

参考文章:http://blog.csdn.net/zhu_xun/article/details/24796235

http://blog.csdn.net/damotiansheng/article/details/39735441

最新文章

  1. Android 软引用
  2. 第六节:Vue过滤器的用法和自定义过滤器
  3. 利用manifest文件对程序目录下的dll进行分类
  4. Archiving
  5. ssh免密码登录记录
  6. USACO dualpal
  7. 二叉树问题(区间DP好题)
  8. 使用travis-ci自动部署github上的项目
  9. String.IndexOf 方法笔记
  10. 分布式事务2PC_PENDING异常处理
  11. 5.AutoCompleteTextView、自定义广播
  12. iOS---------Xcode中添加预编译pch文件
  13. [转帖]一键获取 所有连接过的wifi 密码
  14. linux 之挂载和解压
  15. wps表格开发C#
  16. 结对项目 https://github.com/quchengyu/jiedui/tree/quchengyu-patch-1
  17. python prettytable模块
  18. php 网站301重定向设置代码实战案例
  19. 【BZOJ2882】 工艺(SAM)
  20. 8 Ways to Become a Better Coder

热门文章

  1. camke GUI工具 选择 vs2017 时,如何指定工具集 v140 而不是默认的 v141?
  2. android 手机设置铃声
  3. Android系统移植与调试之------->如何修改Android的默认语言、默认时区
  4. centos7安装nodejs 和 yarn
  5. 0102-使用 API 网关构建微服务
  6. linux中获取系统时间的几种方法
  7. 前端基础之JavaScript_(2)_BOM对象
  8. Python进阶(4)_进程与线程 (python并发编程之多进程)
  9. This version of the rendering library is more recent than your version of ADT plug-in. Please update ADT plug-in问题
  10. image has dependent child images