expr 是 Shell 腳本中常用的表達式求值工具,支援整數運算、字串長度、子串擷取、索引查找、模式匹配等功能。本文整理常用語法與實例,可作為命令列計算器與字串處理速查表。
*、(、))需用反斜線 \ 轉義。expr length "this is a test"
# 14
expr 14 % 9 # 餘數 → 5
expr 10 + 10 # 加法 → 20
expr 1000 + 900 # → 1900
expr 30 / 3 / 2 # 除法 → 5
expr 30 \* 3 # 乘法需轉義 → 90
expr 30 * 3 # 錯誤:Syntax error
expr substr "this is a test" 3 5
# 從第 3 字元起取 5 字元 → "is is"
expr index "testforthegame" e
# e 首次出現於第 2 位 → 2
expr index "sarasara" a
# → 2
expr quote thisisatestformela
# → thisisatestformela
LOOP=0
LOOP=`expr $LOOP + 1`
# 或現代語法:LOOP=$((LOOP+1))
rr=3.4
expr $rr + 1
# expr: non-numeric argument
rr=5
expr $rr + 1
# 6
VALUE=account.doc
expr $VALUE : '.*'
# 字串長度 → 8
expr $VALUE : '\(.*\)\.doc'
# 擷取 .doc 前的部分 → account
#!/bin/bash
# 計算檔名長度
for f in *; do
len=$(expr length "$f")
echo "$f : $len"
done
# 擷取副檔名
filename="report.pdf"
ext=$(expr "$filename" : '.*\.\(.*\)')
echo "Extension: $ext" # pdf

expr 雖功能強大,但語法較繁瑣。現代 Bash 推薦使用 $((...)) 整數運算、${#var} 字串長度、${var:offset:length} 子串、[[ $var =~ regex ]] 正則匹配,效能更好且可讀性更高。expr 仍適用於 POSIX sh 相容腳本或嵌入式環境。
VMware 虛擬機克隆後網卡故障:MAC 地址衝突根因與修復實戰
Linux 安裝 JITWatch 完整教學:Java JIT 編譯分析工具部署指南
Ubuntu 終端卸載軟件包完整指南:dpkg 列表查詢、精準移除與依賴清理
Ubuntu 修改 sudo 密碼快取逾時時間:延長或永久記住密碼設定教學
Linux 雙伺服器 IP 無縫切換實戰:ifconfig 別名介面 + arping 免費 ARP 宣告秒級遷移
Linux 内核参数调优:vfs_cache_pressure 与 min_free_kbytes 提升系统响应
Arch Linux/Manjaro 掛載 iPhone 完整教學:安裝 libimobiledevice 與 ifuse 步驟