Я хочу заменить обратную косую черту () с косой чертой(
/
) в переменной в bash.
Я пробовал это так, но это не работает:
home_mf = ${home//()//(/)}
например, я хотел бы
abc -> /a/b/c
Я хочу заменить обратную косую черту () с косой чертой(
/
) в переменной в bash.
Я пробовал это так, но это не работает:
home_mf = ${home//()//(/)}
например, я хотел бы
abc -> /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
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
Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]