2016-09-29 2 views
0

Я пытаюсь выполнить замену строк в bash, хочу понять ее лучше.переменная bash в подстановке строк

Я обработал случай успеха, как это:

a=abc_de_f 
var=$a 
echo ${var//_/-} 

Outout является abc-de-f. Это работает.

Однако следующий скрипт не:

a=abc_de_f 
echo ${$a//_/-} 

Сообщение об ошибке ${$a//_/-}: bad substitution. Похоже, что мы можем использовать переменную в подстановке. Почему это не удается? Как bash обрабатывает переменные в этом случае?

Также, как лучше всего обрабатывать escape-символы в замене строки bash?

ответ

3

Во втором случае вам не нужен второй $, так как a - это строка.

a=abc_de_f 
echo ${a//_/-} 

Если вы хотите добавить уровень indirection, вы можете использовать ! перед переменной, как в

a=abc_de_f 
b=a 
echo ${b//_/-} 

Выведет a, в то время как

echo ${!b//_/-} 

выход будет abc-de-f.

См. here для обсуждения вопроса об искусстве побега в BASH

Смежные вопросы