这个模式 arg="${arg//\\/\\\\}" 的含义是什么

这个模式 arg="${arg//\\/\\\\}" 的含义是什么

请解释一下模式的用途

arg="${arg//\\/\\\\}"

是指完全匹配吗?

答案1

${var//pattern/replacement}是 ksh93 shell 的参数扩展运算符。

它扩展到$var与 匹配的每个字符串都pattern被替换为的值replacement

该操作符已被一些 shell 复制,包括 zsh、bash 和 mksh。否则它不是标准的 sh 参数扩展运算符。

该模式是 shell 的全局模式,例如?匹配单个字符、*匹配任何字符序列、匹配、或字符[abc]中的任何一个(并且各种 shell 对这些字符有额外的扩展)。abc

'*'如果一个特殊的全局字符像, \*, ¹一样被引用"*",那么它会被按字面意思理解。${var//\?/replacement}例如替换问号而不是每个字符。

反斜杠也必须像用\\or'\'或 一样引用"\\"来表示自身,因此意味着扩展到每个出现的反斜杠已被两个反斜杠替换${var//\\/\\\\}的值。$var


1尽管对于整体在双引号内的\情况,使用而不是其他引用运算符通常更可取。${...}如果模式和/或替换是从扩展派生的,并且这些扩展没有被引用(例如与${var//$pattern/$replacement}相对)${var//"$pattern"/"$replacement"},那么反斜杠在 ksh93 和 bash 中必须加倍,但在 mksh 或 zsh 中不能(至少在其当前版本中)

相关内容