เรียบง่ายเช่นนี้
(ทุบตี)
for i in * ; do mv -- "$i" "${i:0:5}" ; done
voila
และคำอธิบายจากคู่มือการใช้สคริปต์การทุบตีขั้นสูง ( บทที่ 10 การจัดการตัวแปร ) (พร้อมNOTEอินไลน์พิเศษเพื่อเน้นข้อผิดพลาดในคู่มือนั้น):
การสกัดซับสตริง
${string:position}
สารสกัดจาก substring ที่$string
$position
ถ้า$string
พารามิเตอร์คือ "*" หรือ "@" $position
จากนั้นสารสกัดนี้พารามิเตอร์ตำแหน่งเริ่มต้นที่
${string:position:length}
สารสกัดจาก$length
ตัวละครของ substring จากที่$string
$position
NOTEไม่มีเครื่องหมายคำพูดรอบการขยายพารามิเตอร์! echo
ไม่ควรใช้สำหรับข้อมูลโดยพลการ
stringZ=abcABC123ABCabc
# 0123456789.....
# 0-based indexing.
echo ${stringZ:0} # abcABC123ABCabc
echo ${stringZ:1} # bcABC123ABCabc
echo ${stringZ:7} # 23ABCabc
echo ${stringZ:7:3} # 23A
# Three characters of substring.
# Is it possible to index from the right end of the string?
echo ${stringZ:-4} # abcABC123ABCabc
# Defaults to full string, as in ${parameter:-default}.
# However . . .
echo ${stringZ:(-4)} # Cabc
echo ${stringZ: -4} # Cabc
# Now, it works.
# Parentheses or added space "escape" the position parameter.
ตำแหน่งและระยะเวลาในการขัดแย้งสามารถ "แปร" นั่นคือแสดงเป็นตัวแปรมากกว่าที่จะเป็นตัวเลขคงที่
ถ้า$string
พารามิเตอร์คือ "*" หรือ "@" จากนั้นสารสกัดนี้สูงสุดของพารามิเตอร์ตำแหน่งเริ่มต้นที่$length
$position
echo ${*:2} # Echoes second and following positional parameters.
echo ${@:2} # Same as above.
echo ${*:2:3} # Echoes three positional parameters, starting at second.
NOTE: expr substr
เป็นส่วนขยายของ GNU
expr substr $string $position $length
สารสกัดจาก$length
ตัวละครจากเริ่มต้นที่$string
$position
stringZ=abcABC123ABCabc
# 123456789......
# 1-based indexing.
echo `expr substr $stringZ 1 2` # ab
echo `expr substr $stringZ 4 3` # ABC
NOTE: นั่นecho
ซ้ำซ้อนและทำให้มันน่าเชื่อถือน้อยลง expr substr + "$string1" 1 2
ใช้
NOTE: expr
จะกลับมาพร้อมกับสถานะออกไม่เป็นศูนย์หากเอาต์พุตเป็น 0 (หรือ -0, 00 ... )
BTW abs-guide
หนังสือที่มีอยู่ในพื้นที่เก็บข้อมูลอย่างเป็นทางการอูบุนตู
bash
ติดแท็กหากคุณกำลังขอทางsh
แก้ไข?