在 bash 中的变量中将反斜杠(“\”)替换为正斜杠(“/”)

在 bash 中的变量中将反斜杠(“\”)替换为正斜杠(“/”)

我想在 bash 中将变量中的反斜杠 ( \) 替换为正斜杠 ( /)。我尝试了以下方法,但不起作用:

home_mf = ${home//(\)//(/)}

例如,我想

\a\b\c -> /a/b/c

答案1

正确的替换是

home_mf="${home//\\//}"

分解如下:

  • //替换每一个
  • \\反斜杠
  • /
  • /削减

示范:

$ t='\a\b\c'; echo "${t//\\//}"
/a/b/c

另一种可能更容易阅读的方法是引用模式('\'而不是\\)和替换("/"而不是简单的/):

home_mf="${home//'\'/"/"}"

答案2

这将做到这一点:

home_mf=${home//\//\\} # forward to backward slash
home_mf=${home//\\//} # backward to forward slash

例如:

$猫斜线.sh
/bin/bash #!/bin/bash
设置-x
主页=/aa/bb/cc       
home_mf=${主页//\//\\}
回显$home_mf
home_mf=${home_mf//\\//}
回显$home_mf
$./斜杠.sh
+ 主页=aa/bb/cc
+ home_mf='\aa\bb\cc'
+ 回显'\aa\bb\cc'
\aa\bb\cc
+ home_mf=/aa/bb/cc
+ 回显 /aa/bb/cc
/aa/bb/cc

${variable/..}语法是ksh、,bash也可能是其他 shell 特有的,但并非所有基于 Bourne shell 语法的 shell 都存在,例如dash。如果您想要一种可移植的方式(POSIX),您可以改用sed

home_mf=$(printf "%s" "$home" | sed 's/\//\\/g')    # forward to backward slash
home_mf=$(printf "%s" "$home_mf" | sed 's/\\/\//g') # backward to forward slash

相关内容