Заменить обратный слеш("") с косой черты("/") в переменную в bash

Я хочу заменить обратную косую черту () с косой чертой(/) в переменной в bash.
Я пробовал это так, но это не работает:

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

например, я хотел бы

abc -> /a/b/c
5
задан Toby Speight
источник

2 ответов

правильная замена

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

это распадается следующим образом:

  • // заменить все
  • \ обратная косая черта
  • / С
  • / полоснуть

демонстрация:

$ t='\a\b\c'; echo "${t//\//}"
/a/b/c
8
отвечен Toby Speight 2016-04-21 09:51:18
источник

это будет делать это:

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

например:

$ cat slash.sh
#!/bin/bash
set -x
home=/aa/bb/cc       
home_mf=${home//\//\}
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\cc
+ home_mf=/aa/bb/cc
+ echo /aa/bb/cc
/aa/bb/cc

The ${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
6
отвечен jlliagre 2016-04-21 14:19:13
источник

Другие вопросы bash bash-scripting