请解释一下模式的用途
arg="${arg//\\/\\\\}"
是指完全匹配吗?
答案1
${var//pattern/replacement}
是 ksh93 shell 的参数扩展运算符。
它扩展到$var
与 匹配的每个字符串都pattern
被替换为的值replacement
。
该操作符已被一些 shell 复制,包括 zsh、bash 和 mksh。否则它不是标准的 sh 参数扩展运算符。
该模式是 shell 的全局模式,例如?
匹配单个字符、*
匹配任何字符序列、匹配、或字符[abc]
中的任何一个(并且各种 shell 对这些字符有额外的扩展)。a
b
c
'*'
如果一个特殊的全局字符像, \*
, ¹一样被引用"*"
,那么它会被按字面意思理解。${var//\?/replacement}
例如替换问号而不是每个字符。
反斜杠也必须像用\\
or'\'
或 一样引用"\\"
来表示自身,因此意味着扩展到每个出现的反斜杠已被两个反斜杠替换${var//\\/\\\\}
的值。$var
1尽管对于整体在双引号内的\
情况,使用而不是其他引用运算符通常更可取。${...}
如果模式和/或替换是从扩展派生的,并且这些扩展没有被引用(例如与${var//$pattern/$replacement}
相对)${var//"$pattern"/"$replacement"}
,那么反斜杠在 ksh93 和 bash 中必须加倍,但在 mksh 或 zsh 中不能(至少在其当前版本中)