Par*_*ara 20 bash bash-scripting
我想用bash 中的变量中的\正斜杠(/)替换反斜杠()。我这样试过,但它不起作用:
home_mf = ${home//(\)//(/)}
Run Code Online (Sandbox Code Playgroud)
例如,我想
\a\b\c -> /a/b/c
Run Code Online (Sandbox Code Playgroud)
Tob*_*ght 34
正确的替换是
home_mf="${home//\\//}"
Run Code Online (Sandbox Code Playgroud)
这分解如下:
// 更换每一个\\ 反斜杠/ 和/ 削减示范:
$ t='\a\b\c'; echo "${t//\\//}"
/a/b/c
Run Code Online (Sandbox Code Playgroud)
另一种可能更容易阅读的替代方法是引用模式和替换:
home_mf="${home//'\'/"/"}"
Run Code Online (Sandbox Code Playgroud)
jll*_*gre 11
这将做到:
home_mf=${home//\//\\} # forward to backward slash
home_mf=${home//\\//} # backward to forward slash
Run Code Online (Sandbox Code Playgroud)
例如:
$ cat slash.sh
#!/bin/bash
设置 -x
家= /aa/bb/cc
home_mf=${home//\//\\}
回声 $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和其他可能的炮弹具体,但不会出现在所有基于Bourne 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
Run Code Online (Sandbox Code Playgroud)