У меня возникла проблема с заменой переменных в оболочке BASH. Скажем, вы определяете переменную a. Затем команда
$> echo ${a//[0-4]/}
печатает свое значение со всеми номерами от 0 до 4 удаленных:
$> a="Hello1265-3World"
$> echo ${a//[0-4]/}
Hello65-World
Кажется, что это работает очень хорошо, но давайте взглянем на следующий пример:
$> b="你1265-3好"
$> echo ${b//[0-4]/}
你1265-3好
Подстановка не состоялась: я предполагаю, что это потому, что b содержит символы CJK. Этот вопрос распространяется на все случаи, когда задействованы квадратные скобки. Удивительно, но переменная замена без квадратных скобок отлично работает в обоих случаях:
$> a="Hello1265-3World"
$> echo ${a//2/}
Hello165-3World
$> b="你1265-3好"
$> echo ${b//2/}
你165-3好
Является ли это ошибкой или я что-то упускаю?
Я использую Lubuntu 12.04, terminal is и echo $BASH_VERSION возвращает 4.2.24 (1) -release.
EDIT: Эндрю Джонсон в своем комментарии заявил, что с gnome-terminal 4.2.37 (1) - освобождение команды отлично работает. Интересно, является ли это проблемой lxterminal или ее конкретной версии 4.2.24 (1) -release.
EDIT: Я попробовал это с gnome-terminal на Lubuntu 12.04, но проблема все еще там ...