हाँ, यह शेल पैरामीटर विस्तार में एक पैटर्न प्रतिस्थापन है :
${parameter/pattern/replacement}
लेकिन अगर पहले के बाद का पहला चरित्र या /तो है या इसका विशेष अर्थ है (बार-बार), और ।/#%allstartend
साथ में:
$ 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, लेकिन नहींbashहै और न हीksh।