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

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

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

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

abc -> /a/b/c
9
задан Toby Speight
10.02.2023 3:26 Количество просмотров материала 3171
Распечатать страницу

2 ответа

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

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

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

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

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

$ t='\a\b\c'; echo "${t//\//}"
/a/b/c
8
отвечен Toby Speight 2023-02-11 11:14

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

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 2023-02-11 13:31

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх