shift命令用於對參數的移動(左移),通常用於在不知道傳入參數個數的情況下依次遍歷每個參數然后進行相應處理(常見於Linux中各種程序的啟動腳本)。
示例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個參數: abcd e
那么$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
---------------------
作者:jack-zhu
來源:CSDN
原文:https://blog.csdn.net/zhu_xun/article/details/24796235
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!