Linux Shell 在程式設計面遠勝 Windows 批次檔,陣列操作功能強大。本文總結陣列常用操作技巧。
a=(1 2 3 4 5)
echo $a # 1(僅第一個元素)
echo ${a[@]} # 1 2 3 4 5(全體元素)
用 () 定義,元素以空白分隔。
| 操作 | 語法 | 範例 |
|---|---|---|
| 取得長度 | ${#a[@]} 或 ${#a[*]} | 5 |
| 讀取單一元素 | ${a[索引]} | ${a[2]} → 3(索引從 0 開始) |
| 讀取所有元素 | ${a[@]} 或 ${a[*]} | 1 2 3 4 5 |
| 賦值/修改 | a[索引]=值 | a[1]=100 → 1 100 3 4 5 |
| 新增元素 | a[新索引]=值 | a[5]=100 → 1 100 3 4 5 100 |
| 刪除單一元素 | unset a[索引] | unset a[1] → 1 3 4 5(長度變 4) |
| 刪除整個陣列 | unset a | 陣列消失 |
a=(1 2 3 4 5)
echo ${a[@]:0:3} # 1 2 3(從索引 0 取 3 個)
echo ${a[@]:1:4} # 2 3 4 5(從索引 1 取 4 個)
c=(${a[@]:1:4}) # 加上 () 變成新陣列
echo ${#c[@]} # 4
echo ${c[*]} # 2 3 4 5
語法:${陣列[@或*]:起始:長度},回傳字串(空白分隔),加 () 可轉為新陣列。
a=(1 2 3 4 5)
echo ${a[@]/3/100} # 1 2 100 4 5(不改原陣列)
echo ${a[@]} # 1 2 3 4 5
a=(${a[@]/3/100}) # 重新定義才會修改
echo ${a[@]} # 1 2 100 4 5
語法:${陣列[@或*]/搜尋/替換},不改變原陣列,需重新定義才生效。
Shell 陣列已支援長度、索引、分片、替換、刪除等核心操作,日常腳本開發綽綽有餘。