Please explain the use of pattern
arg="${arg//\\/\\\\}"
Does it mean exact match?
Please explain the use of pattern
arg="${arg//\\/\\\\}"
Does it mean exact match?
${var//pattern/replacement}
is a parameter expansion operator of the ksh93 shell.
It expands to the value of $var
where every occurrence of strings matching the pattern
have been replaced with replacement
.
That operator has been copied by a few shells including zsh, bash and mksh. It is otherwise not a standard sh parameter expansion operator.
The pattern is a glob pattern of the shell for instance where ?
matches a single character, *
matches any sequence of characters, [abc]
match any one of a
, b
or c
characters (and various shells have additional extensions over those).
If a special glob character is quoted like with '*'
, \*
, "*"
¹, then it is taken literally. ${var//\?/replacement}
for instance replaces question marks instead of every single character.
A backslash must also be quoted like with \\
or '\'
or "\\"
to represent itself so ${var//\\/\\\\}
means expand to the value of $var
where each occurrence of backslash has been replaced with two backslashes.
¹ Using \
as opposed to other quoting operators is generally preferable though for the cases where the whole ${...}
is within double quotes. If the patterns and/or replacements are derived from expansions, and those expansions are not quoted (like in ${var//$pattern/$replacement}
as opposed to ${var//"$pattern"/"$replacement"}
, then backslashes must be doubled in ksh93 and bash, but must not in mksh or zsh (at least in their current versions)