萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Shell 字串處理利器:expr 指令完整用法

expr — 運算式求值 (字串、算術、邏輯)

expr 是 POSIX 標準指令,Shell 腳本中進行字串操作與整數運算的基礎工具。注意:參數之間必須以空白分隔,運算子若為 Shell 特殊字元 (* ( ) | 等) 需跳脫。

字串操作

語法功能範例結果
expr length "STRING"字串長度 (字元數)expr length "hello world"11
expr substr "STRING" POS LEN擷取子字串 (1-based 索引)expr substr "hello world" 7 5world
expr index "STRING" CHARS尋找 CHARS 中任一字元在 STRING 首次出現位置 (1-based)expr index "hello world" "aeiou"2 (e)
expr match "STRING" REGEX從開頭匹配 REGEX (BRE),回傳匹配長度expr match "hello123" "hello[0-9]*"8
expr "STRING" : "REGEX"同 match (冒號寫法)expr "hello123" : "hello\([0-9]*\)"123 (若 REGEX 有 \(\) 則輸出捕獲組)
expr quote TOKEN輸出 TOKEN 字面值 (避免被解釋為運算子)expr quote ++

整數算術運算

運算子功能範例結果
+ - * / %加減乘除餘expr 14 % 95
= > >= < <= !=比較 (真=1, 偽=0)expr 5 \> 31
& |邏輯 AND/OR (短路)expr 5 \& 35 (非零即真,回傳第一個真值)

實用腳本範例

#!/bin/bash
filename="report_20240115_final.pdf"

# 擷取日期部分 (假設固定格式)
date_part=$(expr substr "$filename" 8 8)   # 20240115
echo "Date: $date_part"

# 判斷副檔名
if [ $(expr "$filename" : ".*\.pdf$") -gt 0 ]; then
    echo "PDF file"
fi

# 計算檔案大小 (KB → MB)
size_kb=2048
size_mb=$(expr $size_kb / 1024)
echo "${size_kb}KB = ${size_mb}MB"

現代替代方案 (Bash/Zsh 內建,效能更好)

操作exprBash 內建
長度expr length "$s"${#s}
子字串expr substr "$s" 3 5${s:2:5} (0-based)
模式匹配長度expr "$s" : 'regex'[[ $s =~ regex ]]; echo ${#BASH_REMATCH[0]}
算術expr 5 + 3$((5+3)) 或 let "a=5+3"

建議:純 Shell 腳本優先使用內建語法;需 POSIX 相容或極簡環境 (initramfs、busybox) 才用 expr。

copyright © 萬盛學電腦網 all rights reserved