用法解釋:
shift指令用于對參數的移動(左移),通常用于在不知道傳入參數個數的情況下依次周遊每個參數然後進行相應處理(常見于Linux中各種程式的啟動腳本)。
示例1:依次讀取輸入的參數并列印參數個數:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL00keNdXTq1UeRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL3IDN0QTMzQTMwMTNwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
從上可知 shift(shift 1) 指令每執行一次,變量的個數($#)減一(之前的$1變量被銷毀,之後的$2就變成了$1),而變量值提前一位。
同理,shift n後,前n位參數都會被銷毀,例如示例2
示例2
運作結果:
示例3:
指令行參數處理
./imx6mksdboot.sh -device /dev/sdd -flash emmc -ddrsize 512
#指令行處理,根據選項獲得參數
while [ $# -gt 0 ]; do
case $1 in
--help | -h)
usage $0
;;
-device) shift; device=$1; shift; ;;
-flash) shift; flash=$1; shift; ;;
-ddrsize) shift; ddrsize=$1; shift; ;;
--version) version $0;;
*) copy="$copy $1"; shift; ;;
esac
done
當指令中有 -device時,會使用shift将參數左移,也就是去掉此前的$1,也就是指令中-device,此時的$1就成為了後面的 /dev/sdd,這樣就讓device變量等于/dev/sdd,一次類推
usage $0是函數調用,将$0也就是腳本的名字摻入usage 函數中,在函數中需要用$1來擷取