題 在bash中的變量中用反斜杠(“/”)替換反斜杠(“\”)


我想替換反斜杠(\)用正斜杠(/)在bash中的變量中。 我試過這樣,但它不起作用:

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

例如,我想

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

4
2018-04-21 07:24


起源


這屬於UNIX.SE - Dan Dascalescu


答案:


正確的替代是

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

這分解如下:

  • // 替換每一個
  • \\ 反斜線
  • / 同
  • / 削減

示範:

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

8
2018-04-21 09:51





這樣做:

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

例如。:

$ cat slash.sh
#!/斌/慶典
設置-x
家=/ AA / BB / cc的       
home_mf = $ {//家\ // \\}
echo $ home_mf
home_mf = $ {home_mf // \\ / \ /}
echo $ home_mf
$ ./slash.sh
+ home = aa / bb / cc
+ home_mf ='\ aa \ bb \ cc'
+ echo'\ aa \ bb \ cc'
\ AA \ BB \立方厘米
+ home_mf = / aa / bb / cc
+ echo / aa / bb / cc
/ AA / BB / cc的

${variable/..} 語法是 kshbash,以及可能的其他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

6
2018-04-21 07:30



不起作用echo“輸出:$ home_mf”為“/ home / user”返回“output:homeuser” - Para
編輯答案以證明它適用於我。不確定您的情況會發生什麼,請嘗試使用 printf "%s\n" "$home_mf" 代替 echo "$home_mf"。 - jlliagre
也許我沒有正確地說我想把“\ a \ b \ c”變成“a / b / c”而不是相反 - Para
你提出了相反的要求。更新答案以處理這兩種情況。 - jlliagre