《Advanced Bash-scripting Guide》学习(十一):shift的用法

本文所选的例子来自于《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

 


__EOF__

本文作者cnhkzyy
本文链接https://www.cnblogs.com/my_captain/p/7147646.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   cnhkzyy  阅读(251)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示