Я хочу заменить обратную косую черту (\) на прямую косую черту (/) в переменной в bash.
Я попробовал это так, но это не работает:
home_mf = ${home//(\)//(/)}
Например, я хотел бы
\a\b\c -> /a/b/c
Я хочу заменить обратную косую черту (\) на прямую косую черту (/) в переменной в bash.
Я попробовал это так, но это не работает:
home_mf = ${home//(\)//(/)}
Например, я хотел бы
\a\b\c -> /a/b/c
Правильная замена
home_mf="${home//\\//}"
Это разбивается следующим образом:
// заменить каждый\\ обратная косая черта/ с/ косая чертаДемонстрация:
$ t='\a\b\c'; echo "${t//\\//}"
/a/b/c
Это сделает это:
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
Синтаксис ${variable/..} является специфичным для ksh , bash и, возможно, других оболочек, но не присутствует во всех оболочках, основанных на синтаксисе оболочки Bourne, например, 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