这是bash变量实例化中的某种正则表达式吗?

这是bash变量实例化中的某种正则表达式吗?,bash,parameter-expansion,Bash,Parameter Expansion,这两个赋值i和C省略了第一个要作废的赋值,它们做了什么?它是变量的某种正则表达式吗?我尝试使用bash,但到目前为止,在使用${I/\/\\\\\}或\${I/\/\\\\}实例化字符串后,字符串的输出没有变化\ 这是bash参数展开 它用双反斜杠替换所有反斜杠:${i/\\/\\\\} 它用\\:${i/\/\\\}替换所有\项 检查它的bash参数扩展 它用双反斜杠替换所有反斜杠:${i/\\/\\\\} 它用\\:${i/\/\\\}替换所有\项 Check${i/\\/\\\\}是一个看

这两个赋值i和C省略了第一个要作废的赋值,它们做了什么?它是变量的某种正则表达式吗?我尝试使用bash,但到目前为止,在使用${I/\/\\\\\}或\${I/\/\\\\}实例化字符串后,字符串的输出没有变化\

这是bash参数展开

它用双反斜杠替换所有反斜杠:${i/\\/\\\\} 它用\\:${i/\/\\\}替换所有\项 检查它的bash参数扩展

它用双反斜杠替换所有反斜杠:${i/\\/\\\\} 它用\\:${i/\/\\\}替换所有\项 Check

${i/\\/\\\\}是一个看起来稍微复杂的参数扩展:

它按以下方式展开变量$i:

${i//find/replace}表示用replace替换find的所有实例。在这种情况下,要找到的东西是\,它本身需要另一个\。 替换为两个\,每个\都需要转义。 例如:

$ i='a\b\c'
$ echo "${i//\\/\\\\}"
a\\b\\c
下一行执行另一个参数展开:

查找需要转义的,因为它位于双引号字符串中 替换为\双引号和反斜杠都需要转义。 循环的目的似乎是构建一个字符串C,试图安全地引用/转义传递给脚本的参数。这种方法通常容易出错,直接使用输入数组可能更好。例如,传递给脚本的参数可以安全地传递给另一个命令,如:

cmd "$@" # does "the right thing" (quotes each argument correctly)
如果你真的需要避开反斜杠,你也可以这样做:

cmd "${@//\\/\\\\}" # replaces all \ with \\ in each argument
${i/\\/\\\}是一个看起来稍微复杂的参数扩展:

它按以下方式展开变量$i:

${i//find/replace}表示用replace替换find的所有实例。在这种情况下,要找到的东西是\,它本身需要另一个\。 替换为两个\,每个\都需要转义。 例如:

$ i='a\b\c'
$ echo "${i//\\/\\\\}"
a\\b\\c
下一行执行另一个参数展开:

查找需要转义的,因为它位于双引号字符串中 替换为\双引号和反斜杠都需要转义。 循环的目的似乎是构建一个字符串C,试图安全地引用/转义传递给脚本的参数。这种方法通常容易出错,直接使用输入数组可能更好。例如,传递给脚本的参数可以安全地传递给另一个命令,如:

cmd "$@" # does "the right thing" (quotes each argument correctly)
如果你真的需要避开反斜杠,你也可以这样做:

cmd "${@//\\/\\\\}" # replaces all \ with \\ in each argument

噢。它看起来像是试图通过转义反斜杠和双引号将DOS文件路径列表存储在单个字符串中。第一步是简单地使用数组:C=$@。反斜杠应该不受影响;如果C知道DOS文件路径,它就不需要对它们进行转义,如果不知道,引用它们可能不会有帮助。它看起来像是试图通过转义反斜杠和双引号将DOS文件路径列表存储在单个字符串中。第一步是简单地使用数组:C=$@。反斜杠应该不受影响;如果C知道DOS文件路径,它就不需要对它们进行转义,如果不知道,引用它们可能不会有帮助。