shift [n]
將位置參數左移 n 位(預設 1),$1 被捨棄,$2→$1,$# 遞減。
| 變數 | 說明 |
|---|---|
| $0 | 腳本名稱 |
| $1 ~ $9 | 第 1~9 個參數 |
| ${10} ... | 第 10 個以後需用大括號 (Bash 3.0+) |
| $@ | 所有參數(保持分隔) |
| $* | 所有參數(單一字串) |
| $# | 參數總數 |
#!/bin/bash
until [ -z "$1" ]; do
echo "處理: $1"
shift
done
#!/bin/bash
verbose=0
while [ $# -gt 0 ]; do
case "$1" in
-v|--verbose) verbose=1; shift ;;
-o|--output) output="$2"; shift 2 ;;
--) shift; break ;;
-*) echo "錯誤選項: $1"; exit 1 ;;
*) break ;;
esac
done
echo "verbose=$verbose, output=$output, 剩餘參數: $@"
#!/bin/bash
sum=0
until [ -z "$1" ]; do
sum=$((sum + $1))
shift
done
echo "總和: $sum"
shift 若超過參數總數會報錯;建議搭配 until [ -z "$1" ] 或 while [ $# -gt 0 ] 迴圈。shift 僅影響函式自身的位置參數。args=("$@")。