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