ใช่มันเป็นการแทนที่รูปแบบในการขยายพารามิเตอร์เชลล์ดังนี้:
${parameter/pattern/replacement}
แต่ถ้าตัวอักษรตัวแรกหลังจากที่ครั้งแรก/เป็นอย่างใดอย่างหนึ่ง/หรือ#หรือ%ว่ามันมีความหมายพิเศษall(ซ้ำ) และstartend
ด้วย:
$ str='one_#two_two_three_one'
หนึ่ง/จะแทนที่อินสแตนซ์แรก ตัวอย่างแรกของone:
$ echo "${str/one/x-x}"
x-x_#two_two_three_one
หรือตัวอย่างแรกของtwo:
$ echo "${str/two/x-x}"
one_#x-x_two_three_one
ตัวอย่างของoneการสิ้นสุด:
$ echo "${str/%one/x-x}"
one_#two_two_three_x-x
การทำซ้ำทั้งหมดของtwo:
$ echo "${str//two/x-x}"
one_#x-x_x-x_three_one
ตัวอย่างของoneการเริ่มต้น:
$ echo "${str/#one/x-x}"
x-x_#two_two_three_one
สตริงที่ขึ้นต้นด้วย#(อ้างถึง#):
$ echo "${str/\#two/x-x}"
one_x-x_two_three_one
แต่ถ้าคุณปล่อย # (ไม่ระบุไว้) เพียงอย่างเดียวการแทนที่จะถูกตั้งไว้ที่จุดเริ่มต้นของตัวแปร:
$ echo "${str/#/====}"
====one_#two_two_three_one
นอกจากนี้หากพารามิเตอร์เป็นอาร์เรย์การแทนที่จะทำในองค์ประกอบทั้งหมด:
$ str=( one two three )
$ echo "${str[@]/#/==}"
==one ==two ==three
#และ%เป็นส่วนหนึ่งของรูปแบบในขณะที่//เป็นโอเปอเรเตอร์ที่แตกต่างจาก/และใช้รูปแบบเดียวกัน คุณสามารถมีpattern='#x'; echo "${var/$pattern}"(หรือ${var//$pattern}) แต่ไม่ได้เช่นเดียวกับpattern=/x; echo "${var/$pattern}"echo "${var//x}"โปรดทราบว่า#และ%สามารถรวมกันในzshแต่ไม่ว่ามิได้bashksh